对REST的理解

REST

Representational State Transfer (资源的)表现层状态转化

1.资源(Resources)

​ 一个具体URI。

2.表现层(Representation)

​ 通过Http请求,头信息里的Accept和Content-Type字段描述。

3.状态转化(State Transfer)

​ 使用Http协议里的4个动词:GET、POST、PUT、DELETE,来操作资源在服务器端的状态。

RESTful API

1.协议

​ 通过Http(s)协议提供API服务。

2.域名

1
2
http://api.example.com 通用API
http://example.com/api/

3.版本化(Versioning)

​ 版本号放入URL中。

1
2
http://api.example.com/v1/
http://api.example.com/v2/

​ 版本号放入Http头信息中。

1
2
3
curl https://api.github.com/users/technoweenie -I
HTTP/1.1 200 OK
X-GitHub-Media-Type: github.v3

4.路径(Endpoint)

​ 路径又称”终点”(endpoint),表示API的具体网址。

​ 由于每个URL代表一种资源,所以URL中不能有动词,只能有名词,并且是复数形式。

1
2
http://api.example.com/v1/books
http://api.example.com/v1/foods/

5.Http动词

1
2
3
4
5
6
7
8
GET: 从服务器取资源(1项或多项)。
POST: 在服务器端新建资源。
PUT: 在服务器端更新资源(客户端提供完整资源)。
PATCH: 在服务器端更新资源(客户端提供改变的字段)。
DELETE: 从服务器端删除资源。
HEAD: 获取资源元数据。
OPTIONS: 获取信息,关于资源的那些属性是客户端可以改变的。

e.g.:

1
2
3
4
5
GET /books /books/ID
POST /books
PUT /books/ID
PATCH /books/ID
DELETE /books/ID

6.过滤信息(Filtering)

1
2
3
4
5
?limit=10
?offset=10
?page=2&per_page=50
?sortby=name&order=desc
?book_id=1

7.状态码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
200 OK GET
201 CREATED POST/PUT/PATCH
202 Accepted *
204 NO CONTENT DELETE 删除数据成功。
400 Invalid Request POST/PUT/PATCH
401 Unauthorized *
403 Forbidden *
404 Not Found *
406 Not Acceptable GET
410 Gone GET
422 Unprocesable Entity POST/PUT/PATCH
500 Internal Server Error *

详细状态码

8.错误处理

1
2
3
{
error:"Invalid API key"
}

9.返回结果

​ Json格式返回符合请求的操作的结果。

参考:http://www.ruanyifeng.com/blog/2014/05/restful_api.html