REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。
他这样介绍他的写作目的:“”我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构”
Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。
RESTful Web服务会天然具备如下的属性:
a、客户端-服务器:UI是与数据存储分离的
b、无状态:每个请求会包含服务器所需的足够信息,无需维护状态进行操作
c、可缓存:服务端响应会返回足够的信息,客户端会对需要缓存的信息做合理的决策
d、统一接口:URL可以唯一识别资源
Richardson的成熟度模型
第0级-HTTP
我们只需通过http协议获取资源即可
第1级-资源
资源会与资源统一标识符URL关联,这个级别的目的在于暴露多个资源,处理应用程序的复杂性
eg:/users 将会包含所有用户列表
/user/42将会包含特定的用户
第2级-HTTP动作
这个级别使用的是HTTP动作来识别资源可能的行为。
主要的动作如下:
GET: 通过URL读取数据
HEAD:和GET相同但不包括响应体,获取资源的元数据
DELETE:删除指定资源
PUT:更新或创建资源(一般幂等)
POST:更新或创建资源
PATCH:部分更新资源(客户端发送部分内容)
OPTIONS:返回服务器端针对特定资源所支持的方法列表
第3级-超媒体控制
超媒体控制也被称为超媒体即应用状态引擎,通过使用超文本链接,可以进行服务的发现。 例如在通过使用PUT方法创建资源之后,服务端应该返回“201 CREATED”的响应,并且在响应头信息中使用Location属性中包含新创建资源的URL.