1. 什么是REST
REST全称是Representational State Transfer。REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。 所以我们这里描述的REST也是通过HTTP实现的REST。
2. 理解REST
从资源的定义、获取、表述、关联、状态变迁等角度,列举一些关键概念并加以解释。
2.1 资源与URL
要让一个资源可以被识别,需要有个唯一标识,在Web中这个唯一标识就是URI(Uniform Resource Identifier)。
URL设计上的一些技巧
使用/来表示资源的层级关系
使用_或-来让URI可读性更好
使用?用来过滤资源(query)
1
/pulls?state=closed
用来表示git项目中已经关闭的推入请求
1
/pulls/?page=2&per_page=100
指定第几页,以及每页的记录数。
,或;可以用来表示同级资源的关系
1
/git/git /block-sha1/sha1.h/compare/e3af72cdafab5993d18fae056f87e1d675913d08;bd63e61bdf38e872d5215c07b264dcc16e4febca
比较某个文件在随意两次提交记录之间的差异
2.2 统一资源接口
接口应该使用标准的HTTP方法如GET,PUT,POST,PATCH,DELETE,并遵循这些方法的语义。
- GET(SELECT):从服务器取出资源(一项或多项)。
- POST(CREATE):在服务器新建一个资源。
- PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
- PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
- DELETE(DELETE):从服务器删除资源。
下面是一些例子:
列出所有动物园。
1
GET /zoos
获取某个指定动物园的信息
1
GET /zoos/ID
新建一个动物园
1
POST /zoos
更新某个指定动物园的信息(提供该动物园的全部信息)
1
PUT /zoos/ID
更新某个指定动物园的信息(提供该动物园的部分信息)
1
PATCH /zoos/ID
删除某个动物园
1
DELETE /zoos/ID
删除某个指定动物园的指定动物
1
DELETE /zoos/ID/animals/ID
2.3 资源的表述
资源在外界的具体呈现,可以有多种表述(或成为表现、表示)形式,在客户端和服务端之间传送的也是资源的表述,而不是资源本身。 例如文本资源可以采用html、xml、json等格式,图片可以使用PNG或JPG展现出来。
资源的表述包括数据和描述数据的元数据,例如,HTTP头”Content-Type” 就是这样一个元数据属性。
可以通过HTTP内容协商,客户端可以通过Accept头请求一种特定格式的表述,服务端则通过Content-Type告诉客户端资源的表述形式。
以github为例,请求某组织资源的json格式的表述形式: