乐趣区

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.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 篇文章,分别为:
Yii2.0 RESTful API 基础配置教程
Yii2.0 RESTful API 认证教程
Yii2.0 RESTful API 之版本控制
写得实在不怎么样,您如果看了有收获,不妨留言给个评论,或者您觉得写得有问题,或者不明白,也可以留言,我们可以一块探讨研究。

退出移动版