以前我寫過兩篇關於 Yii2.0 RESTful API
如何搭建,以及 認證
等處理,可是沒有涉及到版本管理,今天就來談談版本管理如何實現。php
索性就從頭開始一步一步搭建吧,可是關於一些概念以及使用本篇就不一一解釋了,能夠參考 第一篇 Yii2.0 RESTful API 基礎配置教程 進行配置laravel
這是安裝Yii2.0的首選方法。若是你尚未安裝 Composer
,你能夠按照這裏的說明進行安裝。git
安裝完 Composer
,運行下面的命令來安裝 Composer Asset
插件:github
composer global require "fxp/composer-asset-plugin:^1.2.0"
安裝高級的應用程序模板,運行下面的命令:web
composer create-project yiisoft/yii2-app-advanced yii-api 2.0.14
打開api\config\main.php
修改id
,controllerNamespace
:bootstrap
return [ 'id' => 'app-api', 'basePath' => dirname(__DIR__), 'controllerNamespace' => 'api\controllers', ]
在初始化以前不妨先看下這篇文章api
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:主要我也不會......)restful
個人理解:
Yii2 的版本你能夠理解爲不一樣的模塊,每個版本就是一個新的模塊,好比常見的v1,v2等。
關於如何生成模塊,咱們可使用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), 你能夠根據本身的須要來進行配置,或者不配置
瀏覽器中輸入 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 篇文章,分別爲:
寫得實在不怎麼樣,您若是看了有收穫,不妨留言給個評論,或者您以爲寫得有問題,或者不明白,也能夠留言,咱們能夠一塊探討研究。