专栏首页IT码农Yii2 使用 RESTful 写API接口 实例

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 如下,

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组件的配置:

'urlManager' => [

'enablePrettyUrl' => true,

'enableStrictParsing' => true,

'showScriptName' => false,

'rules' => [

['class' => 'yii\rest\UrlRule', 'controller' => 'user'],

],

]

说明:

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

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

配置另外的:

'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,如果你进这个文件后,你会看到下面这些方法:

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

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

例如:

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

G

M

T

Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

Text-to-speech function is limited to 200 characters

Options : History : Feedback : Donate

Close

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP 中最全的设计模式(23种)

    1. 按照目的分,目前常见的设计模式主要有23种,根据使用目标的不同可以分为以下三大类:

    botkenni
  • 五种常见的 PHP 设计模式

    单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

    botkenni
  • Apache主配置文件httpd.conf 详解

    Apache的主配置文件:/etc/httpd/conf/httpd.conf 默认站点主目录:/var/www/html/ Apache服务器的配置信息全...

    botkenni
  • XML解析

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823
  • 【经验总结】Java在ACM算法竞赛编程中易错点

    一、Java之ACM易错点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输...

    Angel_Kitty
  • java基础第十四篇之Map

    一,Map集合的特点: * * 1.Map集合和Collection集合,没有关系 * * 2.Map集合的元素是成对存在(夫妻关系)...

    海仔
  • Flutter Widget框架之旅 顶

    Flutter小部件采用现代反应式框架构建,从React中获得灵感。 中心思想是你从小部件中构建你的UI。 小组件描述了他们的视图在给定其当前配置和状态时应该看...

    南郭先生
  • 说说FactoryBean

    常用的使用场景为:根据不同的配置类型返回不同类型的处理Bean,整体上简化了XML配置等。

    春哥大魔王
  • ASP.NET MVC5+EF6+EasyUI 后台管理系统(49)-工作流设计-我的申请

    提交一个表单后 ? 我们需要一个管理的列表。我的申请,我的申请包含了提交内容的列表状态 状态分:过期,未审核,审核通过,驳回,废弃 列表对应代码 @using ...

    用户1149182
  • jmeter压力测试中的疑难杂症

    大部分新手在用jmeter做压力测试的时候,对一些性能术语十分模糊,直接导致的后果就是对测试出来的结果数据根本不能理解,更谈不上分析了。今天的文章就着重给大家解...

    飞天小子

扫码关注云+社区

领取腾讯云代金券