[RESTful] 设计要素
如何设计RESTful API
- 资源路径(入何规划资源路径)
- HTTP动词(请求方式 GET/POST...)
- 过滤信息(分页,查询操作的时候进行信息过滤)
- 状态码(服务器端响应什么样的状态码)
- 错误处理(如果传入服务器端的参数有问题)
- 返回结果(不同请求的返回结果)
资源路径
在RESTful架构中,每个网址代表一种资源,所以网址中不能有动词,只能有名词。一般来说API中的名词应该使用复数。
例如:有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,它的路径应该设计成:
https://api.example.com/v1/zoos //动物园资源
https://api.example.com/v1/animals //动物资源
https://api.example.com/v1/employees //雇员资源
https:协议头。v1:关于API的版本号(还可以加到HTTP请求头中)。zoos:动物园资源(复数)。
动物园只有一个,所以没有指明动物园的ID。
HTTP动词
对于资源的操作(CURD),由HTTP动词(谓词)表示。
- GET:从服务器取出资源(一项或多项)
- POST:在服务器新建一个资源
- PUT:在服务器更新资源(客户端提供改变后的完整资源)
- DELETE:从服务器删除资源
- PATCH:在服务器更新资源(客户端提供改变的属性)。
put更新资源后,服务器端会返回整个资源。而patch更新完之后只会返回跟新的属性。
举例:
POST/zoos //新建一个动物园
GET/zoos/ID //获取某个指定动物园的信息
PUT/zoos/ID //更新某个指定动物园的信息
DELETE/zoos/ID //删除某个动物园
过滤信息
如果记录数量很多,服务器不可能都将他们返回给用户。
API应该提供参数,过滤返回结果。
举例:
?offset=10 //指定返回记录的开始位置
?page-2&per_page=100 //指定第几页,以及每页的记录数
?sortby=name&order=asc //指定返回结果排序,以及排序顺序
?animal_type_id=1 //指定筛选条件
状态码
服务器向用户返回的状态码和提示信息,使用标准HTTP状态码。
- 200 OK :服务器成功返回用户请求的数据,该操作是幂等的
- 201 CREATED :新建或修改数据成功
- 204 NO CONTENT :删除数据成功
- 400 BAD REQUEST :用户发出的请求有错误,该操作是幂等的
- 401 Unauthorized :表示用户没有认证,无法进行当前操作
- 403 Forbidden :表示用户访问时被禁止的
- 422 Unprocesable Entity :当创建一个对象时,发生一个验证错误
- 500 INTERNAL SERVER ERROR :服务器发生错误,用户将无法判断发出的请求是否成功
错误处理
如果状态码是4xx或者5xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值。例如:
{
"error" : "参数错误"
}
返回结果
针对不同操作,服务器向用户返回的结果应该符合以下规范:
- GET/collections :返回资源对象的列表(数组)
- GET/collections/identity :返回单个资源对象(指定的标识符(identity)对应的对象,不存在返回404状态码)
- POST/collections :返回新生成的资源对象(创建对象的时候)
- PUT/collections/identity :返回完整的资源对象
- PATCH/collections/identity :返回被修改的属性
- DELETE/collections/identity :返回一个空文档
[RESTful] 设计要素的更多相关文章
- RESTful 设计理论
RESTful 设计: 1.协议通信协议:https 2.域名部署在API专用域名下,除非API很简单(https://www.example.com/api)https://api.example. ...
- Restful设计思想
1.REST的架构设计 代表性状态传输(Representational State Transfer,REST)在Web领域已经得到了广泛的接受,是基于SOAP和Web服务描述语言(Web Serv ...
- django RESTful设计方法
1. 域名 应该尽量将API部署在专用域名之下. https://api.example.com 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下. https://example.org ...
- RESTful设计方法
REST REST,即Representational State Transfer的缩写.维基百科称其为“具象状态传输”,国内大部分人理解为“表现层状态转化”. RESTful是一种开发理念.维基百 ...
- php Restful设计
1.restful是基于资源的,面向资源架构风格(一个链接,一张图.一个文本等等) 2.restful的http协议 2.1 url: 2.1.1 port 服务端口,默认为80 2.1.2 path ...
- restful设计参考
https://www.cnblogs.com/pyspark/p/8599210.html 以下查阅多处文档,思考总结: 所谓restful规范代表一种理想状态,首先对此种规范表示赞同,但应不忘实事 ...
- RESTful设计中的常见疑问
最近写了几个有关RESTful的API相关内容,也谈谈对常见问题的自己的理解. 什么是RESTful 详情可以看http://www.ruanyifeng.com/blog/2011/09/restf ...
- Java Web学习(八)RESTful设计
一.RESTful设计风格 REST :指的是一组架构约束条件和原则. RESTful :满足这些约束条件和原则的应用程序或设计就是 . REST 原则 客户端和服务器之间的交互在请求之间是无状态的. ...
- 公司正在开发BI系统?这些设计要素请了解一下!
1. 数据源 第一个要素数据源.企业中的BI工具可能承接上游数据中台或者其他产品输出的结果,作为输入的数据源,每个业务方用的数据库都可能是不一样的,所以可接入数据源的种类决定的一个BI工具的可用性, ...
随机推荐
- P2685 [TJOI2012]桥
P2685 [TJOI2012]桥 思路: 先求出最短路: d1[u] : u 到 1 的最短路, d2[u] : u 到 n 的最短路 再求出一条从 1 到 n 的最短路链,然后从链上的每一个点出发 ...
- 简单了解 DLL中, .def 文件及C#调用C++方法
DLL中导出函数的声明有两种方式: 1.在函数声明中加上__declspec(dllexport) //以下内容为 .h 文件中的内容 //向外界提供的端口 extern"C" _ ...
- Lua完全自学手册(图文教程)
Programming in Lua程序设计 http://book.luaer.cn/ Lua完全自学手册(图文教程) https://edu.aliyun.com/course/506/les ...
- 【Redis】yum安装redis
1.yum直接安装就可以 yum install redis 2.Redis开启远程登录连接 redis默认只能localhost访问 .配置防火墙 开放端口6379 .在redis的配置文件/etc ...
- 【Mac】Mac中如何将相同后缀的所有文件设置指定软件打开
操作步骤: 以settings.xml文件为例 1.首先选中该文件,鼠标右键打开功能列表,选则查看文件信息 2.在文件信息中,进行相关设置
- 浅谈企业IT技术运营中台
关注嘉为科技,获取运维新知 如果你是IT圈内的人,在2月份,你的朋友圈里面最火的词应该就是“中台”了,我们在此不讨论企业的技术中台.数据中台.AI中台.业务中台,想和大家讨论一下IT技术运营中台. “ ...
- JAVA程序设计的第一次作业
这是我第一次接触博客,刚开始用博客很生疏,感觉很麻烦,但是后来慢慢从老师那里了解到了许多博客可以带给我们的便利.通过博客,我们不仅可以记录自己从刚开始进入程序学习的懵懵懂懂到后来想要学,想深究,想探讨 ...
- python 字符串替换、正则查找替换
import re if __name__ == "__main__": url = " \n deded<a href = "">这是第 ...
- LeGO-LOAM编译、运行
LeGO-LOAM Github 地址:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM 相关依赖安装 1. ROS 2.GTSAM 下载gtsa ...
- round函数解决oracle报错"OCI-22053: 溢出错误"的问题
继上次公司网站报错除数为0的问题,这次又来报错溢出错误,还是同一条语句!搜索网上的解决方法,发现问题描述和解决方法如下: Oracle 数值数据类型最多可存储 38 个字节的精度.当将 Oracle ...