专栏首页LaravelCodeYii2.0 RESTful API 之版本控制

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Laravel 使用 Scout 实现全文检索

    可想而知如果我们数据量很大,多达几十万、几百万数据查询一次是非常耗时的。即使你在数据库中添加了索引,还是不尽人意

    hedeqiang
  • Hyperf 初体验-AOP 切面

    再说 AOP 之前,肯定都知道 OOP 是什么,面向对象编程。那么 AOP 就是 面向切面编程

    hedeqiang
  • Yii2.0 初始化自定义模块

    在使用 composer 下载项目的时候,我们会需要使用 php init 命令进行初始化项目。

    hedeqiang
  • 2017 SEM(搜索引擎营销)增长技巧:利用竞争性数据获得巨量付费搜索增长

    译者:陈明艳 审校:王楠楠 本文长度约为2300字,建议阅读8分钟。 想要改善付费搜索广告?被忽视的竞争性数据也能做到! 如何使用竞争性数据改善付费搜索广告呢...

    iCDO互联网数据官
  • Python安装PyGraphics包简

    Python还比较年轻,这几个小软件很小,但找齐不那么容易,官网上可能由于对方有部分库遗失下载不下来,各处收集,全部收齐上传在此,且在命名时已按照逐一安装的顺序...

    py3study
  • GitHub超过9000星,超实用的机器学习路线图

    GitHub:https://github.com/clone95/Virgilio

    昱良
  • 世界杯年轻化娱乐化,媒体如何抢占C位?

    在经历几十个日夜的64场鏖战后,“高卢雄鸡”法国队终于在时隔20年后,捧回大力神杯。颁奖典礼上,天降大雨,给了本届世界杯一个酣畅淋漓的注解,而本届世界杯让人难忘...

    罗超频道
  • 该如何正确的使用SVG sprites?

        大家好,这里是@IT·平头哥联盟,我是`首席填坑官`——苏南,今天要给大家分享的是SVG sprite(也叫雪碧图),所谓雪碧图,当然就不是我们常喝的雪...

    苏南
  • 第三章(1.3)linux下部署tensorflow环境

    两只橙
  • Nginx Ingress 控制器工作原理

    本文的目的是解释 Nginx Ingress 控制器的工作原理,特别是 Nginx 模型的构建方式以及我们为何需要这个模型。

    CNCF

扫码关注云+社区

领取腾讯云代金券