Yii2.0 RESTful API 之版本控制

Yii2.0 RESTful API 之版本控制

以前我寫過兩篇關於 Yii2.0 RESTful API 如何搭建,以及 認證 等處理,可是沒有涉及到版本管理,今天就來談談版本管理如何實現。php

索性就從頭開始一步一步搭建吧,可是關於一些概念以及使用本篇就不一一解釋了,能夠參考 第一篇 Yii2.0 RESTful API 基礎配置教程 進行配置laravel

安裝Yii2.0

經過 Composer 安裝

這是安裝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
複製代碼

拷貝backend目錄,命名爲api

打開api\config\main.php 修改id,controllerNamespacebootstrap

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:主要我也不會......)bash

個人理解: 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.phpcomponents 數組中添加 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 篇文章,分別爲:

Yii2.0 RESTful API 基礎配置教程

Yii2.0 RESTful API 認證教程

Yii2.0 RESTful API 之版本控制

寫得實在不怎麼樣,您若是看了有收穫,不妨留言給個評論,或者您以爲寫得有問題,或者不明白,也能夠留言,咱們能夠一塊探討研究。

相關文章
相關標籤/搜索