Yii2 使用 RESTful 寫API接口 實例

 

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,控制器就能知道使用哪一個模型去獲取和處理數據。測試

配置URL規則

修改有關在應用程序配置的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]
相關文章
相關標籤/搜索