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 篇文章,分别为:
写得实在不怎么样,您如果看了有收获,不妨留言给个评论,或者您觉得写得有问题,或者不明白,也可以留言,我们可以一块探讨研究。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: