Yii2使用RESTful?其實Yii2框架自己就對RESTful是友好支持的,具體能夠看官方文檔(http://www.yiichina.com/doc/guide/2.0/rest-quick-start),或者去看源碼,都是能夠的注意:咱們使用resTful的同時,須要藉助於測試工具進行地址訪問,例如:谷歌的PostMAN,火狐的HttpRequester工具來訪問api
個人工做目錄如圖所示(首先,參照下面的目錄圖片,能夠看出,我建立了兩個大的文件夾,v1,v2,目的是測試訪問不一樣版本的接口)下面以v2中的文件爲例:建立一個控制器類框架
api\modules\v2\yii
UserController
以下,ide
namespaceapi\modules\v2\controllers;useyii\rest\ActiveController;classUserControllerextendsActiveController { public$modelClass='api\modules\v2\models\user\UserBaseInfo'; }
控制器類擴展自yii\rest\ActiveController。經過指定yii\rest\ActiveController::modelClass做爲工具
api\modules\v2\models\user\UserBaseInfo,控制器就能知道使用哪一個模型去獲取和處理數據。測試
修改有關在應用程序配置的ui
urlManager
組件的配置:this
'urlManager'=>[ 'enablePrettyUrl'=>true, 'enableStrictParsing'=>true, 'showScriptName'=>false, 'rules'=>[ ['class'=>'yii\rest\UrlRule','controller'=>'user'], ], ]
說明:a):上面的配置主要是爲url
user
控制器增長一個URL規則。這樣,用戶的數據就能經過美化的URL和有意義的http動詞進行訪問和操做。b):上面是沒有加上版本的url配置,至於關於版本我將以新的一篇來講明.配置另外的spa
:
'controllerNamespace'=>'api\controllers', 'components'=>[ 'user'=>[ 'identityClass'=>'api\modules\v1\models\oauth\AccessToken', 'enableAutoLogin'=>true, 'enableSession'=>false, 'loginUrl'=>null ],
隨着以上所作的最小的努力,你已經完成了建立用於訪問用戶數據的RESTful風格的API。你所建立的API包括:相比於URL管理的Web應用程序,上述主要的新東西是經過RESTfulAPI請求yii\rest\UrlRule。這個特殊的URL規則類將會創建一整套子URL規則來支持路由和URL建立的指定的控制器。例如,上面的代碼中是大體按照下面的規則:
[code][ 'PUT,PATCHusers/<id>'=>'user/update', 'DELETEusers/<id>'=>'user/delete', 'GET,HEADusers/<id>'=>'user/view', 'POSTusers'=>'user/create', 'GET,HEADusers'=>'user/index', 'users/<id>'=>'user/options', 'users'=>'user/options', ]
GET/users
:逐頁列出全部用戶
HEAD/users
:顯示用戶列表的概要信息
POST/users
:建立一個新用戶
GET/users/123
:返回用戶123的詳細信息
HEAD/users/123
:顯示用戶123的概述信息
PATCH/users/123
and
PUT/users/123
:更新用戶123
DELETE/users/123
:刪除用戶123
OPTIONS/users
:顯示關於末端
/users
支持的動詞
OPTIONS/users/123
:顯示有關末端
/users/123
支持的動詞補充:Yii將在末端使用的控制器的名稱自動變爲複數。(譯註:我的感受這裏應該變爲注意)通過上面的配置後,你會看到你的控制類繼承的是yii\rest\ActiveController,若是你進這個文件後,你會看到下面這些方法:
publicfunctionactions() { return[ 'index'=>[ 'class'=>'yii\rest\IndexAction', 'modelClass'=>$this->modelClass, 'checkAccess'=>[$this,'checkAccess'], ], 'view'=>[ 'class'=>'yii\rest\ViewAction', 'modelClass'=>$this->modelClass, 'checkAccess'=>[$this,'checkAccess'], ], 'create'=>[ 'class'=>'yii\rest\CreateAction', 'modelClass'=>$this->modelClass, 'checkAccess'=>[$this,'checkAccess'], 'scenario'=>$this->createScenario, ], 'update'=>[ 'class'=>'yii\rest\UpdateAction', 'modelClass'=>$this->modelClass, 'checkAccess'=>[$this,'checkAccess'], 'scenario'=>$this->updateScenario, ], 'delete'=>[ 'class'=>'yii\rest\DeleteAction', 'modelClass'=>$this->modelClass, 'checkAccess'=>[$this,'checkAccess'], ], 'options'=>[ 'class'=>'yii\rest\OptionsAction', ], ]; }/** *@inheritdoc */ protectedfunctionverbs() { return[ 'index'=>['GET','HEAD'], 'view'=>['GET','HEAD'], 'create'=>['POST'], 'update'=>['PUT','PATCH'], 'delete'=>['DELETE'], ]; }
從上面的方法咱們能夠知道,若是在你使用yii框架自帶的方法時,它默認有create,delete,update,index,view等的一下方法所建立的API包括:
GET/users
:逐頁列出全部用戶
POST/users
:建立一個新用戶
GET/users/123
:返回用戶123的詳細信息
PATCH/users/123
and
PUT/users/123
:更新用戶123
DELETE/users/123
:刪除用戶123可是若是你要是不想用他的某些方法,咱們能夠經過下面的方法來本身覆蓋對應的方法例如:
publicfunctionactions() { $actions=parent::actions();//註銷系統自帶的實現方法 unset($actions['index']);//unset($actions['create']); //unset($actions['update']); //unset($actions['delete']); return$actions; }//覆蓋父類的actionIndex方法,並進行重寫 publicfunctionactionIndex() { //獲取用戶全部信息 ...... }
對於其餘的方法同上....
因而咱們就能夠經過方法地址獲取想要的數據:GET'target='_blank'>http://www.api.com/users[/code]