一、RESTful是一种API设计思想
目前大多数软件都不是单机的,而是客户端/服务器模式,比如网站、APP、小程序等等。
REST,即Representational State Transfer的缩写,翻译为"(资源的)表现层状态转化"。
如果一个架构符合REST原则,就称它为RESTful架构。
1. 资源(Resources)
网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。
用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
2. 表现层(Representation)
资源是怎么展示的,
比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。
3. 状态转化(State Transfer)
客户端通过HTTP协议操作资源的变换。
四种基本操作:
- GET用来获取资源,
- POST用来新建资源(也可以用于更新资源),
- PUT用来更新资源,
- DELETE用来删除资源。
二、RESTful架构
(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
三、举例
1. 网上汇款,从账户1向账户2汇款500元
错误
POST /accounts/1/transfer/500/to/2
正确
POST /transaction HTTP/1.1
Host: 127.0.0.1
from=1&to=2&amount=500.00
把动词transfer改成名词transaction,资源不能是动词,但是可以是一种服务
2. 查询已发布的文章
错误
GET /articles/published
正确
GET /articles?published=true
3. 状态信息应该使用正确的
错误
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "failure",
"data": {
"error": "Expected at least two items in list."
}
}
正确
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": "Invalid payoad.",
"detail": {
"surname": "This field is required."
}
}
四、总结
1. URL中核心是资源的名称
为每个资源设置URI
2. 通过HTTP动词表示URL中,对资源的操作
使用HTTP动词:GET POST PUT DELETE
3. 服务端返回码符合规范,客户端可以直接知道错误类型
通过XML JSON进行数据传递;
使用HTTP状态码
HTTP 状态码就是一个三位数,分成五个类别。
1xx
:相关信息2xx
:操作成功3xx
:重定向4xx
:客户端错误5xx
:服务器错误
http://www.ruanyifeng.com/blog/2011/09/restful.html
http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html