рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ RESTful API рдПрдореНрдмреЗрдб рдХрд░реЗрдВ

рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рд╣реЛрдирд╛ рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░, рд╕рд┐рд╕реНрдЯрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдпрд╛ рдЗрд╕реЗ рдПрдХ рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдорд░реНрдерди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдУрд╡рд░рд╣реЗрдб рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рд╕рдореБрджрд╛рдп рдХреЛ рдПрдХ рдХрдареЛрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреЛрдб рдХреА рдирдХрд▓ рдХреЗ рдмрд┐рдирд╛ рдФрд░ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рдеред рдпрд╛ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╛рдБрдЪ рдорд┐рдирдЯ рдореЗрдВ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ?

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ Yii рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА MVC рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде RestUserController рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ:

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ RestUser рдореЙрдбрд▓ рднреА рд╣реИ, рдЬреЛ рдПрдХ ActvieRecord rest_users рдЯреЗрдмрд▓ рд╣реИред

actionCreate рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдп рдирдпрд╛ RestUser рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдирд╛ рд╣реИ,
 class RestUserController extends Controller { ... public function actionCreate() { $model = new RestUser(); if (isset($_POST) && ($data = $_POST)) { //    POST  $model->attributes = $data; //      if ($model->save()) { //  ,   -   $this->redirect(array('view', 'id' => $model->id)); } } $this->render('create', array('model' => $model)); //  html-  } ... } 

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз /restUser/create - рдПрдХ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП HTML рдлреЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо рдЗрд╕ рдкрддреЗ рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рддрд░реНрдХ рдХреЛ рдорд╛рдиреНрдп рдФрд░ рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рдлрд┐рд░ рдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкреБрдирдГ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ рдпрд╛ рдПрдЪрдЯреАрдПрдордПрд▓ рдлреЙрд░реНрдо c рджреЗрдЦреЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВред

рдЕрдм, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдПрдХ рдРрд╕рд╛ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛ рд╕рдХреЗрдЧрд╛ред рд╕рд░реНрд╡рд░ API рдмрдирд╛рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИред
рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рд░реИрд╕реНрдЯрдлреБрд▓ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рдФрд░ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкрд░рд╕реНрдкрд░ рдХреНрд░рд┐рдпрд╛, рдХрд░реНрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рджреЗрдЦреЗрдВрдЧреЗ:

рдЬрд╛рдВрдЪ

 curl http://test.local/api/users \ -u demo:demo \ -d email="user@test.local" \ -d password="passwd" 

рдЬрд╡рд╛рдм рд╣реИ

 < HTTP/1.1 201 Created < Content-Type: application/json < WWW-Authenticate: Basic realm="App" < Location: http://test.local/api/users/TEST_ID { "object":"rest_user", "id":"TEST_ID", "email":"user@test.local", "name":"Test REST User" } 

рдпрд╣рд╛рдВ, рдбреЗрдореЛ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдбреЗрдореЛ рд▓реЙрдЧрд┐рди рдХреЗ HTTP рдмреЗрд╕рд┐рдХ рдХреЛрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдИрдореЗрд▓ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд╡рд╛рдм рдореЗрдВ, рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреВрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдХреЗрд╡рд▓ redirect рдФрд░ render рддрд░реАрдХреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдореЙрдбрд▓ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред
рдмреЗрд╢рдХ, рдПрдкреАрдЖрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рд╕рд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдЕрд╡рд░реЛрдзрди, рд╕рд╛рде рд╣реА рдореЙрдбрд▓ рдмрдирд╛рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рд╣рдорд╛рд░реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ, рд╣рдордиреЗ onException рдФрд░ onError рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ onException рдФрд░ рд╕рд╛рде рд╣реА CController рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреЗрд╕ CActiveRecord рдореЙрдбрд▓ рдФрд░ CController рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдХрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред
рдирддреАрдЬрддрди, рдХреЛрдб рдЬреЛ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде HTML рдлреЙрд░реНрдо, рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
 class RestUserController extends Controller { ... public function actionCreate() { $model = new RestUser(); if ($this->isPost() && ($data = $_POST)) { //   isPost   isPut  isDelete $model->attributes = $data; if ($model->save()) { $this->redirect(array('view', 'id' => $model), true, 201); //   } } $this->render('create', array('model' => $model), false, array('model')); //    model } ... } 

рдирдП рдХреЛрдб рдФрд░ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмреАрдЪ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ redirect рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг $model->id рдХреЗ id рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ $model->id , рд▓реЗрдХрд┐рди $model рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛, рддрд╛рдХрд┐ рдирд┐рд░реНрдорд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПред рд╕рд╛рде рд╣реА, рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб 201 рдЬреЛрдбрд╝рд╛ - рдпрд╣ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде, рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЗрдбрд░ рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 3xx HTTP рдХреЛрдб рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред
рдПрдХ рдФрд░ рдЕрдВрддрд░ render рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдЪреМрдерд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдП рдЧрдП $data рд╕рд░рдгреА рд╕реЗ рдлрд╝реАрд▓реНрдб рдХреА рдЧрдгрдирд╛ рд╣реИред рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ null рддреЛ рд╕рдВрдкреВрд░реНрдг $data рд╕рд░рдгреА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред

рдЕрдм, рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдЧрд▓рдд рд╣реИ, рддреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ HTML рдлреЙрд░реНрдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:

рдЬрд╛рдВрдЪ

 curl http://test.local/api/users \ -u demo:demo \ -d email="user@test.local" 

рдЬрд╡рд╛рдм рд╣реИ

 < HTTP/1.1 400 Bad Request < Content-Type: application/json < WWW-Authenticate: Basic realm="App" { "error":{ "params":[ { "code":"required", "message":"Password cannot be blank.", "name":"password" } ], "type":"invalid_param_error", "message":"Invalid data parameters" } } 

рдареАрдХ рд╣реИ, рдЕрдм рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ RestUser рдпрд╣ password рдлрд╝реАрд▓реНрдб рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдо рдореЗрдВ рджрд┐рдП рдЧрдП рдлрд╝реАрд▓реНрдб рдХреА рд╕реВрдЪреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред
рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдирд┐рдпрдо rules рд╡рд┐рдзрд┐ рдореЗрдВ рд╣реЛрдЧрд╛
 class RestUser extends CModel { public function rules() { return array( ... array('id, email, name', 'safe', 'on' => 'render'), ); } } 

рдЗрд╕ рдирд┐рдпрдо рдХреЛ рддрдм getRenderAttributes рдкрджреНрдзрддрд┐ рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдореЙрдбрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдЧрд╛, рдпрджрд┐ рд╡реЗ рдирд┐рдпрдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрдмрдВрдзреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛрд░ рдШрдЯрдХ (рд╕реЗрд╡рд╛) \rest\Service рдЖрд╕рдкрд╛рд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдореБрдЦреНрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕ рд╕реЗрд╡рд╛ рдореЗрдВ рдПрдбреЗрдкреНрдЯрд░ auth рдФрд░ renderer рджреЛ рд╕рдореВрд╣ рд╣реИрдВред
рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдореЗрдВ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдПрдбрд╛рдкреНрдЯрд░реНрд╕ рд╣реИрдВ - рдбрд┐рдлреЙрд▓реНрдЯ HTTP рдмреЗрд╕рд┐рдХ рдСрд░реНрдЯрд┐рдлрд┐рдХреЗрд╢рди рдПрдбреЗрдкреНрдЯрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред
renderer рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдбреЗрдкреНрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рджреЛ JSON рдФрд░ XML рдПрдбреЗрдкреНрдЯрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рд╡рд┐рд╕реНрддрд╛рд░


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕

рдЙрджрд╛рд╣рд░рдг main.php рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓
 YiiBase::setPathOfAlias('rest', realpath(__DIR__ . '/../extensions/yii-rest-api/library/rest')); return array( 'basePath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..', 'name' => 'My Web Application', 'preload' => array('restService'), 'import' => array( 'application.models.*', 'application.components.*', ), 'components' => array( 'restService' => array( 'class' => '\rest\Service', 'enable' =>strpos($_SERVER['REQUEST_URI'], '/api/') !== false, //   ), 'urlManager' => array( 'urlFormat' => 'path', 'showScriptName' => false, 'baseUrl' => '', 'rules' => array( array('restUser/index', 'pattern' => 'api/v1/users', 'verb' => 'GET', 'parsingOnly' => true), array('restUser/create', 'pattern' => 'api/v1/users', 'verb' => 'POST', 'parsingOnly' => true), array('restUser/view', 'pattern' => 'api/v1/users/<id>', 'verb' => 'GET', 'parsingOnly' => true), array('restUser/update', 'pattern' => 'api/v1/users/<id>', 'verb' => 'PUT', 'parsingOnly' => true), array('restUser/delete', 'pattern' => 'api/v1/users/<id>', 'verb' => 'DELETE', 'parsingOnly' => true), array('restUser/index2', 'pattern' => 'api/v2/users', 'verb' => 'GET', 'parsingOnly' => true), //  ,      API ) ), ), ); 

рдирд┐рдпрдВрддреНрд░рдХ рдФрд░ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛрдбрд╝реЗрдВ
 /** * @method bool isPost() * @method bool isPut() * @method bool isDelete() * @method string renderRest(string $view, array $data = null, bool $return = false, array $fields = array()) * @method void redirectRest(string $url, bool $terminate = true, int $statusCode = 302) * @method bool isRestService() * @method \rest\Service getRestService() */ class RestUserController extends Controller { public function behaviors() { return array( 'restAPI' => array('class' => '\rest\controller\Behavior') ); } //   $fields  ,      public function render($view, $data = null, $return = false, array $fields = array('count', 'model', 'data')) { if (($behavior = $this->asa('restAPI')) && $behavior->getEnabled()) { if (isset($data['model']) && $this->isRestService() && count(array_intersect(array_keys($data), $fields)) == 1) { $data = $data['model']; //    API,      ,     -    $fields = null; } return $this->renderRest($view, $data, $return, $fields); } else { return parent::render($view, $data, $return); } } public function redirect($url, $terminate = true, $statusCode = 302) { if (($behavior = $this->asa('restAPI')) && $behavior->getEnabled()) { $this->redirectRest($url, $terminate, $statusCode); } else { parent::redirect($url, $terminate, $statusCode); } } } 

рдЗрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдореВрд▓ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЙрдбрд▓ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдирд┐рдпрдо рдХрд╛рдо рдХрд░реЗрдВ
 /** * @method array getRenderAttributes(bool $recursive = true) * @method string getObjectId() */ class RestUser extends CActiveRecord { /** * @return array */ public function behaviors() { return array( 'renderModel' => array('class' => '\rest\model\Behavior') ); } } 


рд╕рдВрджрд░реНрдн


рдЧрд┐рдЯрд╣рдм рднрдВрдбрд╛рд░ - github.com/paysio/yii-rest-api
рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╕реЗрдЯрдЕрдк рд╡рд┐рд╡рд░рдг - github.com/paysio/yii-rest-api#installation
рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛрдб github.com/paysio/yii-rest-api/tree/master/demo рд╣реИ

Source: https://habr.com/ru/post/In155021/


All Articles