Yii2 使用 RESTful 写API接口 实例

Yii2 使用 RESTful?

其实 Yii2 框架本身就对 RESTful 是友好支持的,具体可以看官方文档(http://www.yiichina.com/doc/guide/2.0/rest-quick-start),或者去看源码,都是可以的

注意: 我们使用resTful的同时,需要借助于测试工具进行地址访问,例如: 谷歌的PostMAN,火狐的HttpRequester工具来访问
创建一个控制器  

我的工作目录如图所示 (首先, 参照下面的目录图片,可以看出,我创建了两个大的文件夹,v1,v2,目的是测试访问不同版本的接口)

下面以v2中的文件为例:

创建一个控制器类 api\modules\v2\UserController 如下,
[php] view plain copy
 在CODE上查看代码片派生到我的代码片

    namespace api\modules\v2\controllers;  

    use yii\rest\ActiveController;  

    class UserController extends ActiveController
    {
        public $modelClass = ‘api\modules\v2\models\user\UserBaseInfo‘;
    }  

控制器类扩展自 yii\rest\ActiveController。通过指定 yii\rest\ActiveController::modelClass作为
api\modules\v2\models\user\UserBaseInfo, 控制器就能知道使用哪个模型去获取和处理数据。

配置URL规则

修改有关在应用程序配置的urlManager组件的配置:

[php] view plain copy
 在CODE上查看代码片派生到我的代码片

    ‘urlManager‘ => [
        ‘enablePrettyUrl‘ => true,
        ‘enableStrictParsing‘ => true,
        ‘showScriptName‘ => false,
        ‘rules‘ => [
            [‘class‘ => ‘yii\rest\UrlRule‘, ‘controller‘ => ‘user‘],
        ],
    ]  

说明:  

      a): 上面的配置主要是为user控制器增加一个 URL 规则。这样,用户的数据就能通过美化的 URL 和有意义的 http 动词进行访问和操作。

      b): 上面是没有加上版本的url配置,至于关于版本我将以新的一篇来说明.

配置另外的:
[php] view plain copy
 在CODE上查看代码片派生到我的代码片

    ‘controllerNamespace‘ => ‘api\controllers‘,
    ‘components‘ => [
            ‘user‘ => [
                ‘identityClass‘ => ‘api\modules\v1\models\oauth\AccessToken‘,
                ‘enableAutoLogin‘ => true,
                ‘enableSession‘ => false,
                ‘loginUrl‘ => null
            ],  

尝试

随着以上所做的最小的努力,你已经完成了创建用于访问用户数据的 RESTful 风格的 API。你所创建的 API 包括:

相比于URL管理的Web应用程序,上述主要的新东西是通过RESTful API请求yii\rest\UrlRule。这个特殊的URL规则类将会建立一整套子URL规则来支持路由和URL创建的指定的控制器。例如, 上面的代码中是大致按照下面的规则:

[
    ‘PUT,PATCH users/<id>‘ => ‘user/update‘,
    ‘DELETE users/<id>‘ => ‘user/delete‘,
    ‘GET,HEAD users/<id>‘ => ‘user/view‘,
    ‘POST users‘ => ‘user/create‘,
    ‘GET,HEAD users‘ => ‘user/index‘,
    ‘users/<id>‘ => ‘user/options‘,
    ‘users‘ => ‘user/options‘,
]

    GET /users: 逐页列出所有用户
    HEAD /users: 显示用户列表的概要信息
    POST /users: 创建一个新用户
    GET /users/123: 返回用户 123 的详细信息
    HEAD /users/123: 显示用户 123 的概述信息
    PATCH /users/123 and PUT /users/123: 更新用户123
    DELETE /users/123: 删除用户123
    OPTIONS /users: 显示关于末端 /users 支持的动词
    OPTIONS /users/123: 显示有关末端 /users/123 支持的动词

补充:Yii 将在末端使用的控制器的名称自动变为复数。(译注:个人感觉这里应该变为注意)

经过上面的配置后,你会看到你的控制类继承的是yii\rest\ActiveController,如果你进这个文件后,你会看到下面这些方法:

[php] view plain copy
 在CODE上查看代码片派生到我的代码片

    public function actions()
    {
            return [
                ‘index‘ => [
                    ‘class‘ => ‘yii\rest\IndexAction‘,
                    ‘modelClass‘ => $this->modelClass,
                    ‘checkAccess‘ => [$this, ‘checkAccess‘],
                ],
                ‘view‘ => [
                    ‘class‘ => ‘yii\rest\ViewAction‘,
                    ‘modelClass‘ => $this->modelClass,
                    ‘checkAccess‘ => [$this, ‘checkAccess‘],
                ],
                ‘create‘ => [
                    ‘class‘ => ‘yii\rest\CreateAction‘,
                    ‘modelClass‘ => $this->modelClass,
                    ‘checkAccess‘ => [$this, ‘checkAccess‘],
                    ‘scenario‘ => $this->createScenario,
                ],
                ‘update‘ => [
                    ‘class‘ => ‘yii\rest\UpdateAction‘,
                    ‘modelClass‘ => $this->modelClass,
                    ‘checkAccess‘ => [$this, ‘checkAccess‘],
                    ‘scenario‘ => $this->updateScenario,
                ],
                ‘delete‘ => [
                    ‘class‘ => ‘yii\rest\DeleteAction‘,
                    ‘modelClass‘ => $this->modelClass,
                    ‘checkAccess‘ => [$this, ‘checkAccess‘],
                ],
                ‘options‘ => [
                    ‘class‘ => ‘yii\rest\OptionsAction‘,
                ],
            ];
        }  

        /**
         * @inheritdoc
         */
        protected function verbs()
        {
            return [
                ‘index‘ => [‘GET‘, ‘HEAD‘],
                ‘view‘ => [‘GET‘, ‘HEAD‘],
                ‘create‘ => [‘POST‘],
                ‘update‘ => [‘PUT‘, ‘PATCH‘],
                ‘delete‘ => [‘DELETE‘],
            ];
        }  

从上面的方法我们可以知道,如果在你使用yii框架自带的方法时,它默认有create, delete, update, index, view等的一下方法

所创建的 API 包括:

    GET /users: 逐页列出所有用户
    POST /users: 创建一个新用户
    GET /users/123: 返回用户 123 的详细信息
    PATCH /users/123 and PUT /users/123: 更新用户123
    DELETE /users/123: 删除用户123

但是如果你要是不想用他的某些方法,我们可以通过下面的方法来自己覆盖对应的方法

例如:
[php] view plain copy
 在CODE上查看代码片派生到我的代码片

    public function actions()
    {
        $actions = parent::actions();  

        // 注销系统自带的实现方法
        unset($actions[‘index‘]);  

        //unset($actions[‘create‘]);
        //unset($actions[‘update‘]);
        //unset($actions[‘delete‘]);  

      return $actions;
    }  

    //覆盖父类的actionIndex方法,并进行重写
    public function actionIndex()
    {
        //获取用户所有信息
        ......
    }  

对于其他的方法同上....

于是我们就可以通过方法地址获取想要的数据:GET  http://www.api.com/users

原文地址:https://www.cnblogs.com/zhangtianle/p/8467315.html

时间: 2024-10-25 05:53:52

Yii2 使用 RESTful 写API接口 实例的相关文章

Restful风格API接口开发springMVC篇

Restful风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. 在Restful风格中,用户请求的url使用同一个url而用请求方式:get,post,delete,put...等方式对请求的处理方法进行区分,这样可以在前后台分离式的开发中使得前端开发人员不会对请求的资源地址产生混淆和大量的检查方法名的麻烦,形成一个统一的接口. 在Restful风格中,现

web api写api接口时返回

web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Application_Start()方法中添加一句: 复制代码 代码如下: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 修改后: 复制代码 代码如下: protected void

一步一步学swift之:自己写Api接口-PHP

想要自己一个人完成app,那么后台接口也必须自己动动手.不用担心,其实很简单的,给自己信心!下面就以登录注册为例,做一个api接口 首先在mac上搭建PHP环境,下载 MAMP Pro for Mac 3.4 破解版: http://www.ifunmac.com/2015/08/mamp-pro-3-4/即可一键安装Apache/PHP/MySQL开发环境.简单吧. 有了环境就可以写代码了: 首先写一个Config.php (配置数据库) 1 <?php 2 3 //定义数据库连接所需的变量

python写api接口测试之tonador

亚马逊的lambda跟api_dateway搭配编写接口测试,看了文档发现时间29秒必须出结果,否则超时,像我们爬虫数据比较多的,多爬点数据就容易超时,那应该怎么办呢. 于是我挑了一个轻量级的进行简单学习--tonador 这边我写一个接口用来提取介词短语进行接口测试.--正好最近要进行提取介词短语的测试,就以这个例子为主,编码. 首先安装tornado pip install tonador 接下来看代码的实例 # -*- coding:utf-8 -*- import sys import

php写api接口服务端

有很多对于PHP的抱怨,甚至这些抱怨也出自很多聪明的人.当Jeff Atwood写下对于PHP的另一篇 抱怨文章 之后,我思考了下PHP的好的方面. 这些抱怨最大的问题是他们出自很多仍在使用旧版本PHP的人.他们或许是不愿意关心或许是不愿意承认PHP不管在语言层面还是在社区层面都在以很快的速度演变.实际上它比任何其他语言或者web平台都演变的快.尽管并不总是如此,但是过去的五年PHP经历了一个惊人的历程. 在说最近PHP社区取得的惊人成就之前,我们先来看看一些有趣的数字:PHP被77.9%的服务

PHP开发api接口安全验证

php的api接口 在实际工作中,使用PHP写api接口是经常做的,PHP写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json,在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口,获取数据,因此就要使用安全验证. 验证原理 示意图 原理 从图中可以看得很清楚,前台想要调用接口,需要使用几个参数生成签名. 时间戳:当前时间 随机数:随机生成的随机数 口令:前后台开发时,一个双方都知道的标识,相当于暗号 算法规则:商定好的运算规

Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试

环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_rewrite.so 将其前面的#去掉,如果没有找到则添加进去. 找到一下代码 <Directory "C:/phpStudy/Apache/cgi-bin"> AllowOverride All Options None Require all granted </Di

Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下: web ├─ common │ └─ models │ └ User.php └─ frontend ├─ config │ └ main.php └─ controllers └ BookController.php 二.格式化响应 Yii2 RESTful支持JSON和XML格式,如果想指定

用yii2给app写接口(下)

上一节里我们讲了如何用Yii2搭建一个能够给App提供数据的API后台应用程序.那么今天我们就来探讨下授权认证和通过API接口向服务器提交数据以及如何控制API接口返回那些数据,不能返回那些数据. 授权认证 业务分析 我们先来了解一下整个逻辑 用户在客户端填写登录表单 用户提交表单,客户端请求登录接口login 服务端校验用户的帐号密码,并返回一个有效的token给客户端 客户端拿到用户的token,将之存储在客户端比如cookie中 客户端携带token访问需要校验的接口比如获取用户个人信息接