Yii2.0 RESTful API 之版本控制

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.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 之版本控制

寫得實在不怎麼樣,您如果看了有收穫,不妨留言給個評論,或者您覺得寫得有問題,或者不明白,也可以留言,我們可以一塊探討研究。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章