ThinkPHP5 RESTful API开发版本控制
thinkphp5 RESTful api开发版本控制,thinkphp官方文档不是很详细,我根据个人经验分享下。
我们以一个用户信息读取的接口为例,包含两个版本V1
和V2
,v2
版本的接口包括用户的档案信息,统一使用json
格式数据输出到客户端。
在application
目录下面创建api
模块目录,并创建controller
和model
子目录,因为api
接口无需视图,所以不需要创建view
目录。
api
版本号可以在请求头、参数、URL路由参数中传入,以下是tp5.X中使用方法。
第一种:URL路由传入方式(推荐)
在route.php路由文件中配置,如下
return [// api版本路由'api/:version/:controller'=>'api/:version.:controller/index',// 省略方法名时'api/:version/:controller/:function'=>'api/:version.:controller/:function'// 有方法名时];
不同版本的URL访问地址为:
http://tp5.com/api/v1/user/10
http://tp5.com/api/v2/user/10
版本号中不能包含
.
符号。
第二种:请求头传入方式
在route.php路由文件中配置,如下
$v = request()->header('version');
if($v==null) $v = "v1";
return [//api版本控制'api/:controller$'=>['api/'.$v.'.:controller/index',['method' => 'get']],'api/:controller/:function$'=>'api/'.$v.'.:controller/:function',//资源路由'__rest__'=>[//api'api/house'=>['api/'.$v.'.house',['only'=>['index','read','update','delete']]],'api/book'=>['api/'.$v.'.book',['only'=>['index','read','save','delete']]],'api/book_rent'=>['api/'.$v.'.book_rent',['only'=>['index','read','save']]],]
]
第三种:请求参数传入方式
和请求头方式类似,这里不再累述。
控制器实现
v1
版本控制器(类文件位置为application/api/controller/v1/User.php
)代码如下:
namespace app\api\controller\v1;use app\api\model\User as UserModel;class User
{// 获取用户信息public function read($id = 0){$user = UserModel::get($id);if ($user) {return json($user);} else {return json(['error' => '用户不存在'], 404);}}}
v2
版本的控制器(类文件位置为application/api/controller/v2/User.php
)代码如下:
namespace app\api\controller\v2;use app\api\model\User as UserModel;class User
{// 获取用户信息public function read($id = 0){$user = UserModel::get($id, 'profile');if ($user) {return json($user);} else {return json(['error' => '用户不存在'], 404);}}}
最后项目的目录结构(优雅的目录结构,尤其喜欢tp5这个目录结构):
RESTFul
REST
(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST
提出了一些设计概念和准则:
1、网络上的所有事物都被抽象为资源(resource);
2、每个资源对应一个唯一的资源标识(resource identifier);
3、通过通用的连接器接口(generic connector interface)对资源进行操作;
4、对资源的各种操作不会改变资源标识;
5、所有的操作都是无状态的(stateless)。
REST
通常基于使用HTTP
,URI
,和JSON
以及HTML
这些现有的广泛流行的协议和标准。
传统的请求模式和REST
模式的请求模式区别:
作用 | 传统模式 | REST模式 |
---|---|---|
列举出所有的用户 | GET /users/list | GET /users |
列出ID为1的用户信息 | GET /users/show/id/1 | GET /users/1 |
插入一个新的用户 | POST /users/add | POST /users |
更新ID为1的用户信息 | POST /users/update/id/1 | PUT /users/1 |
删除ID为1的用户 | POST /users/delete/id/1 | DELETE /users/1 |
关于更多的REST信息,可以参考:http://zh.wikipedia.org/wiki/REST
标识 | 请求类型 | 生成路由规则 | 对应操作方法(默认) | 描述 |
---|---|---|---|---|
index | GET |
blogs
|
index | 显示列表 |
create | GET |
blogs/create
|
create | 新增页面 |
save | POST |
blogs
|
save | 保存内容 |
read | GET |
blogs/:id
|
read | 查看内容 |
edit | GET |
blogs/:id/edit
|
edit | 编辑页面 |
update | PUT |
blogs/:id
|
update | 更新内容 |
delete | DELETE |
blogs/:id
|
delete | 删除 |
上面的7个路由规则,在本示例中仅使用了5个(其中create和edit页面由于本API接口测试暂时不需要使用)。
REST
请求测试
REST
请求的测试方式有很多,下面介绍两种常用的方式:
Postman
最方便的方法就是通过Postman来测试接口,给Chrome浏览器安装一个postman
扩展,访问下面地址获取官方扩展:https://www.getpostman.com/
安全建议
- 尽量采用HTTPS协议进行接口请求;
- 重要的功能加密传输;
- 做好接口的身份认证;
- 对URL中的参数做好安全过滤;
- 对接口请求做好请求速率限制;
- 重要ID不透明处理;
- 使用JSON格式返回数据;
详细可以参考 《REST API 安全设计指南》
ThinkPHP5 RESTful API开发版本控制相关推荐
- Yii2.0 RESTful API 之版本控制
Yii2.0 RESTful API 之版本控制 之前我写过两篇关于 Yii2.0 RESTful API 如何搭建,以及 认证 等处理,但是没有涉及到版本管理,今天就来谈谈版本管理如何实现. 索性就 ...
- 《ASP.NET Core 与 RESTful API 开发实战》-- (第10章)-- 读书笔记
第 10 章 部署 10.1 部署到 IIS ASP.NET Core 应用程序支持部署到 IIS 中,之后它将作为应用程序的反向代理服务器和负载均衡器,向应用程序中转传入的 HTTP 请求 默认情况 ...
- OpenApi-Generator:简化RESTful API开发流程
目录 1.OpenAPI Generator简介 1.1 OpenAPI Generator是什么? 1.2 为什么选择OpenAPI Generator? 1.3 谁需要 OpenAPI Gener ...
- 谈谈前后端分离实践中如何提升RESTful API开发效率
点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取推荐书籍 来源:33h.co/edZR 团队内部RestAPI开发采用设计驱 ...
- Java Web学习总结(43)—— Restful API 版本控制
在实际项目开发中我们经常需要对接口进行版本管理.那今天我们就来聊聊为什么需要版本控制,以及如何对REST API进行版本控制.我们将讨论4种版本控制的方法,并比较不同的方法. 为什么我们需要对REST ...
- python django开发api_基于Django框架开发Restful api
在上篇文章中,我们讲解了restful api的主要概念,让大家有初步的了解.这一篇中,我们将通过python的Django框架,来学习开发restful 架构的接口. 一. 开发环境 开发语言:Py ...
- 深入探索REST(1):如何设计好的RESTful API?
REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出.HTTP就是该架构风格的一个典型应用.从其诞生之日开始,它就因其可扩展性和简 ...
- 如何设计好的RESTful API?
REST架构风格最初由Roy T. Fielding(HTTP/1.1协议专家组负责人)在其2000年的博士学位论文中提出.HTTP就是该架构风格的一个典型应用.从其诞生之日开始,它就因其可扩展性和简 ...
- 虚拟研讨会:如何设计好的RESTful API?
http://www.infoq.com/cn/articles/how-to-design-a-good-restful-api/ REST架构风格最初由Roy T. Fielding(HTTP/1 ...
最新文章
- Solr_全文检索引擎系统
- 一种灵活,坚固且无凝胶的脑电图电极,可用于无创脑机接口
- 网络营销外包下字节跳动如此优秀私有市场估值远超拼多多与京东
- java开发怎么打补丁_[Java教程]【NC】出补丁与打补丁
- Halcon - 定位 - 卡尺
- SAP CRM Fiori My Appointment应用里点了Edit按钮后三个Roundtrip分析
- 前端vscode插件合集
- 使用bypy从ubuntu通过命令行上传文件到百度云
- ICLR 2020丨微软亚洲研究院精选论文解读
- F. Gourmet and Banquet(贪心加二分求值)
- 上海政府版WINXP真相大揭秘
- 浅谈最短路径的几个方法(Dijkstra,Bellman-Ford,SPFA,Floyd算法)
- 飞思卡尔单片机学习记录(一)
- unity3d的下载与安装
- p5.js创意绘图(1)动态图形
- dns劫持是什么意思?常见的劫持有哪些?
- 几种软件开发方法对比
- 如何销售网站上的广告位
- 私募证券基金动态-12月报
- Python实现电话号码的数字组合
热门文章
- LOG(拉普拉斯高斯函数)缘分天空(数学的魅力)
- 【游记】NOIP-2018翻车记
- 【深度学习】自回归VS自编码
- 【PTA】6-1 顺序表基本操作(10 分)
- 渗透测试靶机:DC-1
- HTML学生个人网站作业设计:旅游景点网站设计——北京故宫(9页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载...
- 基于Vue框架开发的页面加载三维维地图以及交互
- 【机器学习】《动手学深度学习 PyTorch版》李沐深度学习笔记(Alexnet)
- 《中国人工智能学会通讯》——2.14 康复机器人
- 了解身边的超线程、双核、双cpu