Bootstrap

Yii2.0 RESTful API 之版本控制

之前我写过两篇关于 如何搭建,以及 等处理,但是没有涉及到版本管理,今天就来谈谈版本管理如何实现。

索性就从头开始一步一步搭建吧,但是关于一些概念以及使用本篇就不一一解释了,可以参考 第一篇 进行配置

安装Yii2.0

通过 Composer 安装

这是安装Yii2.0的首选方法。如果你还没有安装 ,你可以按照的说明进行安装。

安装完 ,运行下面的命令来安装 插件:

composer global require "fxp/composer-asset-plugin:^1.2.0"

安装高级的应用程序模板,运行下面的命令:

composer create-project yiisoft/yii2-app-advanced yii-api 2.0.14

拷贝backend目录,命名为api

打开 修改,:

return [
    'id' => 'app-api',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'api\controllers',
]

初始化高级模板

在初始化之前不妨先看下文章

cd advanced
php init

打开开启路由美化规则

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
    ],
],

打开添加以下别名

Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');

ok,以上工作准备完毕,接下来进入正题,

关于版本更多介绍可以参考 ,这里不过多解释(PS:主要我也不会......)

我的理解:

Yii2 的版本你可以理解为不同的模块,每一个版本就是一个新的模块,比如常见的v1,v2等。

模块的搭建

关于如何生成模块,我们可以使用GII来进行生成.

配置 GII

打开 文件 修改如下:

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 ,默认是不允许访问 的,所以得加上 ,否则会出现 Forbidden (#403), 你可以根据自己的需要来进行配置,或者不配置

生成Modules

浏览器中输入 ,可以看到 ,点击

中输入:

中输入v1,(一般会自动输入)

点击

最后点击 进行生成

配置模块

打开 文件,修改

'modules' => [
    'v1'=>[
        'class'=>'api\modules\v1\Module',
    ],
],

接着修改

'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目录,请根据自己的实际情况进行配置

打开刚生成的 文件目录,可以看到里面存在一个 的目录,可以看到该目录还有一个,以及一个 目录

,我们刚才访问的 其实就是这两个文件,和传统的web项目一样控制器渲染视图

好了,你可能知道了,我们以后的控制器代码就放到 里了

刚才仅仅是默认GII为我们生成的代码,因为我们是API,所以 目录,我们一般情况下用不到。

新建一个 的控制器

在 下新建

修改 中的

'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,以上就是 版本管理的实现方式

格式化响应

修改 在 数组中添加

'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 篇文章,分别为:

写得实在不怎么样,您如果看了有收获,不妨留言给个评论,或者您觉得写得有问题,或者不明白,也可以留言,我们可以一块探讨研究。