• 技术文章 >后端开发 >php教程

    Yii2.0 RESTful API的版本控制的介绍(代码示例)

    不言不言2019-01-10 11:27:02转载1281
    本篇文章给大家带来的内容是关于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

    427039506-5c36086850b51_articlex.png

    最后点击 Generate 进行生成

    3248197988-5c3608798c334_articlex.png

    配置模块

    打开 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的版本控制的介绍(代码示例)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    上一篇:Yii2.0 RESTful API的速度限制是什么?有什么用? 下一篇:php文件处理函数的详细介绍(附示例)
    大前端线上培训班

    相关文章推荐

    • yii2.0之GridView自定义按钮和链接用法_PHP• yii2.0-advanced 高级版项目搭建(一)• Yii2.0中文开发向导Where条件查询全解析,• 在Yii2.0中实现计划任务(cron)• Yii2.0中文开发指引——自定义日志文件写日志• Yii2.0 模态弹出框+ajax提交表单,yii2.0ajax_PHP教程• Yii2.0中文开发向导——自定义日志文件写日志,yii2.0日志文件_PHP教程

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网