RESTful API设计概要
<table style="height: 30px; background-color: #afeeee; width: 1266px; ; width: 1266px;" border="0"> |
- API与用户的通信协议,总是使用。
2.域名
- https://api.example.com? ? ? ? ? ? ? ? ? ? ? ? ?尽量将API部署在专用域名(会存在跨域问题)
- https://example.org/api/? ? ? ? ? ? ? ? ? ? ? ? API很简单
3.版本
- URL,如:https://api.example.com/v1/? ? ? ? ? ? ? ? ? ? ?版本号放到url,如k8s的apiserver
- 将版本放到请求头中? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 跨域时,引发发送多次请求
4.路径
路径又称"终点"(endpoint),表示API的具体网址。
在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。
5.http方法
GET /<span style="color: #000000;">zoos:列出所有动物园
POST /<span style="color: #000000;">zoos:新建一个动物园
GET /zoos/<span style="color: #000000;">ID:获取某个指定动物园的信息
PUT /zoos/<span style="color: #000000;">ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/<span style="color: #000000;">ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/<span style="color: #000000;">ID:删除某个动物园
GET /zoos/ID/<span style="color: #000000;">animals:列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物
6.过滤,通过在url上传参的形式传递搜索条件
- https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
- https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置
- https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数
- https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序
- https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件
7.状态码使用
8.错误处理
9.返回结果
- GET /collection:返回资源对象的列表(数组)
- GET /collection/resource:返回单个资源对象
- POST /collection:返回新生成的资源对象
- PUT /collection/resource:返回完整的资源对象
- PATCH /collection/resource:返回完整的资源对象
- DELETE /collection/resource:返回一个空文档
10.超链接API
RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么
11.其他
(1)API的身份认证应该使用框架。
(2)服务器返回的数据格式,应该尽量使用JSON,避免使用XML。
参考:1.https://www.cnblogs.com/wupeiqi/articles/7805382.html
? ? 2.https://blog.csdn.net/tjgamejx2/article/details/51011425
? ? 3.http://www.ruanyifeng.com/blog/2014/05/restful_api.html
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!