它的重要性在于客户端和服务器之间的解耦

时间:2021-11-09 08:58:39

说明:其实没有绝对的规范,到达90%即可。

理解RESTful架构:

RESTful API 设计指南:

GitHub标准RESTful API:https://api.github.com/

教程收集:

%E8%AE%BE%E8%AE%A1/2015/08/17/Restful%20API%20%E7%9A%84%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83.html

(以下内容转自此篇文章)

https://www.zhihu.com/question/28557115

URI

URI规范

不要用大写

单词间使用下划线‘_‘

不使用动词,资源要使用名词复数形式,如:user、rooms、tickets

层级 >= 三层,则使用‘?‘带参数

users/1/address/2/citys (bad) /citys?users=1&address=2; (good)

Request

Method

GET:盘问资源

POST:创建资源

PUT/PATCH

PUT:全量更新资源(供给转变后的完整资源)

PATCH:局部更新资源(仅供给转变的属性)

DELETE:删除资源

安适性与幂等性

安适性:任意多次对同一资源操纵,都不会导致资源的状态变革

幂等性:任意次对同一资源操纵,对资源的转变是一样的

Method安适性幂等性
GET      
POST   ×   ×  
PUT   ×    
PATCH   ×    
DELETE   ×    

兼容

很多客户只撑持GET/POST请求,一般有两种方法模拟PUT等请求

添加_method参数

/users/1?_method=put&name=111

添加X-HTTP-Method-Override请求头 (我们使用这种方法)

X-HTTP-Method-Override: PUT

参数

Method

GET

非id的参数使用‘?‘方法传输

/users/1?state=closed

POST、PATCH、PUT、DELETE

非id的参数使用body传输,并且应该encode

过滤

?type=1&state=closed

排序

+升序,如?sort=+create_time,按照id升序

-降序,如?sort=-create_time,按照id降序

分页

?limit=10&offset=10

limit:返回记录数量

offset:返回记录的开始位置

单参数多字段

使用, 分隔断绝分手,如

/users/1?fields=name,age,city

版本控制

三种方案:

在uri中插手版本: /v1/room/1

Accept Header:Accept: v1

自界说 Header:X-Imweb-Media-Type: imweb.v1 (我们使用此方案)

自界说Media-Type参考资料

状态码

告成

CodeMethodDescribe
200   ALL   请求告成并返回实体资源  
201   POST   创建资源告成  

客户端错误

CodeMethodDescribe
400   ALL   一般是参数错误  
401   ALL   一般用户验证掉败(用户名、暗码错误等)  
403   ALL   一般用户权限校验掉败  
404   ALL   资源不存在(github在权限校验掉败的情况下也会返回404,为了防备一些私有接口泄露出去)  
422   ALL   一般是须要字段缺掉或参数格局化问题  

处事器错误

CODEMETHODDESCRIBE
500   ALL   处事器未知错误  

以上是常见的状态码,完整的状态码列表在这状态码

HATEOAS

在介绍HATEOAS之前,先介绍一下REST的成熟度模型

在介绍 HATEOAS 之前,先介绍一下 Richardson 提出的 REST 成熟度模型。该模型把 REST 处事凭据成熟度划分成 4 个条理:

第一个条理(Level 0)的 Web 处事只是使用 HTTP 作为传输方法,实际上只是长途要领挪用(RPC)的一种具体形式。

第二个条理(Level 1)的 Web 处事引入了资源的观点。每个资源有对应的标识符和表达。

第三个条理(Level 2)的 Web 处事使用差此外 HTTP 要领来进行差此外操纵,并且使用 HTTP 状态码来暗示差此外功效。如 HTTP GET 要领来获取资源,HTTP DELETE 要领来删除资源。

第四个条理(Level 3)的 Web 处事使用 HATEOAS。在资源的表达中包罗了链接信息。客户端可以按照链接来发明可以执行的行动。

简述