Yii2.0 RESTful API 之版本控制
之前我寫過兩篇關於 Yii2.0 RESTful API
如何搭建,以及 認證
等處理,但是沒有涉及到版本管理,今天就來談談版本管理如何實現。
索性就從頭開始一步一步搭建吧,但是關於一些概念以及使用本篇就不一一解釋了,可以參考 第一篇 Yii2.0 RESTful API 基礎配置教程 進行配置
安裝Yii2.0
通過 Composer 安裝
這是安裝Yii2.0的首選方法。如果你還沒有安裝 Composer
,你可以按照這裡的說明進行安裝。
安裝完 Composer
,執行下面的命令來安裝 Composer Asset
外掛:
composer global require "fxp/composer-asset-plugin:^1.2.0"
複製程式碼
安裝高階的應用程式模板,執行下面的命令:
composer create-project yiisoft/yii2-app-advanced yii-api 2.0.14
複製程式碼
拷貝backend目錄,命名為api
開啟api\config\main.php
修改id
,controllerNamespace
:
return [
'id' => 'app-api',
'basePath' => dirname(__DIR__),
'controllerNamespace' => 'api\controllers',
]
複製程式碼
初始化高階模板
在初始化之前不妨先看下這篇文章
cd advanced
php init
複製程式碼
開啟common\config\main.php
開啟url
路由美化規則
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
],
複製程式碼
開啟common\config\bootstrap.php
新增以下別名
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');
複製程式碼
ok,以上工作準備完畢,接下來進入正題, 關於版本更多介紹可以參考 權威指南 ,這裡不過多解釋(PS:主要我也不會......)
我的理解: Yii2 的版本你可以理解為不同的模組,每一個版本就是一個新的模組,比如常見的v1,v2等。
模組的搭建
關於如何生成模組,我們可以使用GII來進行生成.
配置 GII
開啟 api/config/main-local.php
檔案 修改如下:
if (!YII_ENV_TEST) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
'allowedIPs' => ['127.0.0.1', '*']
];
}
複製程式碼
我這裡因為使用的是 Homestead ,預設是不允許訪問 GII
的,所以得加上'allowedIPs' => ['127.0.0.1', '*']
,否則會出現 Forbidden (#403), 你可以根據自己的需要來進行配置,或者不配置
生成Modules
瀏覽器中輸入 http://your host/gii
,可以看到 Module Generator
,點選 Start
Modules Class
中輸入:api\modules\v1\Module
Module ID
中輸入v1,(一般會自動輸入)
點選 Preview
最後點選 Generate
進行生成
配置模組
開啟 api/config/main.php
檔案,修改 modules
'modules' => [
'v1'=>[
'class'=>'api\modules\v1\Module',
],
],
複製程式碼
接著修改 urlManager
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'v1/default',
'extraPatterns'=>[
'GET index'=>'index',
],
],
],
],
複製程式碼
基於以上,Yii2.0 RESTFul API 就實現了版本管理,我們可以通過如下地址進行訪問:
http://localhost/v1/defaults
複製程式碼
多說一點,我上方的地址是已經對映到api/web目錄,請根據自己的實際情況進行配置
開啟剛生成的 modules
檔案目錄,可以看到裡面存在一個 v1
的目錄,可以看到該目錄還有一個controllers
,以及一個 views
目錄
,我們剛才訪問的 defaults
其實就是這兩個檔案,和傳統的web專案一樣控制器渲染檢視
好了,你可能知道了,我們以後的控制器程式碼就放到 modules/v1/controllers
裡了
剛才僅僅是預設GII為我們生成的程式碼,因為我們是API,所以 views
目錄,我們一般情況下用不到。
新建一個 rest
的控制器
在 modules\v1\controllers
下新建 UserController
<?php
namespace api\modules\v1\controllers;
use yii\rest\Controller;
/**
* User controller for the `v1` module
*/
class UserController extends Controller
{
/**
* @return string
*/
public function actionIndex()
{
return 'this is v1/user';
}
}
複製程式碼
修改 api/config/main.php
中的urlManager
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule',
'controller' => 'v1/default',
'extraPatterns'=>[
'GET index'=>'index',
],
],
['class' => 'yii\rest\UrlRule',
'controller' => 'v1/user',
'extraPatterns'=>[
'GET index'=>'index',
],
],
],
],
複製程式碼
試著訪問下
http://localhost/v1/users/index
複製程式碼
ok,以上就是 Yii2.0
版本管理的實現方式
格式化響應
修改 api/config/main.php
在components
陣列中新增 response
'response' => [
'class' => 'yii\web\Response',
'on beforeSend' => function ($event) {
$response = $event->sender;
$response->data = [
'success' => $response->isSuccessful,
'code' => $response->getStatusCode(),
'message' => $response->statusText,
'data' => $response->data,
];
$response->statusCode = 200;
},
],
複製程式碼
至此關於 Yii2.0 RESTFul API 我一共完成了 3 篇文章,分別為:
寫得實在不怎麼樣,您如果看了有收穫,不妨留言給個評論,或者您覺得寫得有問題,或者不明白,也可以留言,我們可以一塊探討研究。