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

写得实在不怎么样,您若是看了有收获,不妨留言给个评论,或者您以为写得有问题,或者不明白,也能够留言,咱们能够一块探讨研究。

相关文章
相关标签/搜索