Yii2框架制作RESTful风格的API快速入门教程


Posted in PHP onNovember 08, 2016

先给大家说下什么是REST

restful

REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。 所以我们这里描述的REST也是通过HTTP实现的REST。

前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下《Yii 2.0 权威指南 》,发现上面写得比较简略。所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RESTful的小伙伴快速入门。

一、目录结构

实现一个简单地RESTful API只需用到三个文件。目录如下:

frontend
├─ config
│ └ main.php
├─ controllers
│ └ BookController.php
└─ models
└ Book.php

二、配置URL规则

1.修改服务器的rewrite规则,将所有URL全部指向index.php上,使其支持 /books/1 格式。

如果是Apache服务器,在frontend/web/ 目录中新建.htaccess文件。文件内容如下:

RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php

如果是Nginx服务器,修改nginx/conf/nginx.conf,在当前"server{}"的"location / {}"中添加下面红色标记内容:

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

2.修改frontend/config/main.php文件,为book控制器增加一个 URL 规则。这样,就能通过美化的 URL 和有意义的 http 动词进行访问和操作数据。配置如下:

'components' => [
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'book'],
],
],
],

三、创建一个model

1.在数据库中创建一张book表。book表的内容如下:

-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` char(50) NOT NULL DEFAULT '',
`num` tinyint(3) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES ('1', 'toefl', '10');
INSERT INTO `book` VALUES ('2', 'ielts', '20');
INSERT INTO `book` VALUES ('3', 'sat', '30');
INSERT INTO `book` VALUES ('4', 'gre', '40');
INSERT INTO `book` VALUES ('5', 'gmat', '50');

2.在frontend/models/目录中新建Book.php。文件内容如下:

namespace frontend\models;
use yii\db\ActiveRecord;
class Book extends ActiveRecord
{
public static function tableName()
{
return 'book';
}
}

四、创建一个控制器

在frontend/controllers/目录中新建BookController.php。控制器类扩展自 yii\rest\ActiveController。通过指定 yii\rest\ActiveController::modelClass 作为 frontend\models\Book, 控制器就能知道使用哪个模型去获取和处理数据。文件内容如下:

namespace frontend\controllers;
use yii\rest\ActiveController;
class BookController extends ActiveController
{
public $modelClass = 'frontend\models\Book';
}

五、测试

到这里,我们就已经完成了创建用于访问用户数据 的 RESTful 风格的 API。创建的 API 包括:

GET /books: 列出所有的书
HEAD /books: 显示书的列表的概要信息
POST /books: 新增1本书
GET /books/1: 返回 书ID=1的详细信息
HEAD /books/1: 显示 书ID=1的概述信息
PATCH /books/1 and PUT /books/1: 更新书ID=1的信息
DELETE /books/1: 删除书ID=1的信息
OPTIONS /books: 显示关于末端 /books 支持的动词
OPTIONS /books/1: 显示有关末端 /books/1 支持的动词

可以通过Web浏览器中输入 URL http://{frontend的域名}/books 来访问API,或者使用一些浏览器插件来发送特定的 headers 请求,比如Firefox的RestClient、Chrome的Advanced Rest Client、postman等。

六、说明

1.Yii 将在末端使用的控制器的名称自动变为复数。这是因为 yii\rest\UrlRule 能够为他们使用的末端全自动复数化控制器。可以通过设置yii\rest\UrlRule::pluralize为false来禁用此行为:

'rules' => [
['class' => 'yii\rest\UrlRule', 'controller' => 'book', 'pluralize' => false],
],

2.可以使用fields和expand参数指定哪些字段应该包含在结果内。例如:URL http://{frontend的域名}/books?fields=name,num 将只返回 name 和 num 字段。

以上所述是小编给大家介绍的Yii2框架制作RESTful风格的API快速入门教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
php visitFile()遍历指定文件夹函数
Aug 21 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
Nov 01 PHP
Thinkphp中Create方法深入探究
Jun 16 PHP
Session 失效的原因汇总及解决丢失办法
Sep 30 PHP
yii实现model添加默认值的方法(2种方法)
Jan 06 PHP
php对接java现实加签验签的实例
Nov 25 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
Yii2框架数据验证操作实例详解
May 02 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
Nov 08 #PHP
php基于curl重写file_get_contents函数实例
Nov 08 #PHP
php发送http请求的常用方法分析
Nov 08 #PHP
php curl中gzip的压缩性能测试实例分析
Nov 08 #PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 #PHP
php实现的http请求封装示例
Nov 08 #PHP
PHP实现原生态图片上传封装类方法
Nov 08 #PHP
You might like
smarty实例教程
2006/11/19 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
javascript之AJAX框架使用说明
2010/04/24 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
Vue脚手架的简单使用实例
2018/07/10 Javascript
NodeJs实现简易WEB上传下载服务器
2019/08/10 NodeJs
Vue实现push数组并删除的例子
2019/11/01 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
python绘制随机网络图形示例
2019/11/21 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
信用社实习人员自我鉴定
2013/09/20 职场文书
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
应届大专生自荐书
2014/06/16 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
语文教师求职信范文
2015/03/20 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python