写点什么

Yii2.0 RESTful API 之版本控制

用户头像
Middleware
关注
发布于: 2020 年 05 月 27 日

之前我写过两篇关于 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 advancedphp 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 之版本控制


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


发布于: 2020 年 05 月 27 日阅读数: 60
用户头像

Middleware

关注

PHP 打杂工 2018.03.21 加入

https://laravelcode.cn

评论

发布
暂无评论
Yii2.0 RESTful API 之版本控制