风格 ⇒ 标准 ⇒ 协议 ⇒ 实现
Representational State Transfer,是一种软件架构风格,既然是风格,就非标准或协议,而是定义了一组设计原则和约束条件。具有如下特点:
- 适用于客户端和服务器交互类的软件;
- 基于该风格设计的软件更简洁,更有层次,更易于实现缓存等机制;
- 在REST中,每一个对象都是通过 URL 来表示的
1. 网站即软件
网站即软件,是一种新型的软件。
- 作为软件的网站是一种互联网软件,采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,
- 具有高延时(high latency,受制于带宽)、高并发的特点;
- 软件开发一般针对单机环境,网络则主要研究系统之间的通信;
RESTful 架构的提出,使得网站越来越多地具有软件的属性,通过风格的限制和约束,也使得网站开发能够按照软件开发的方式进行开发。
2. RESTful 架构
REST,representational state transfer,表现层状态转化(还记得 OSI 7层网络模型吗,在网络层、传输层之上又细分为会话层(session layer),表示层(presentation layer))。
- 资源(resources)与资源的展现,表示层状态转移,省略了主语,表现层其实指的是资源的表示层,对资源的展示与表现;
- 资源(resources)就是 URI/URL 的 R;
- 所谓“资源”,就是网络空间中的一个实体,由 URI 唯一指向。它可以是一段文本,一张图片,一首歌曲,甚至是一种服务。
- 一个专门的网站将资源具体呈现出来的形式,叫做它的“表现层”;文本可以用 txt 格式表现,也可用 html 格式、xml 格式、json 格式。URI 仅代表资源,并不指定资源形式。严格说来,某些网页网址(URL)最后的“.html”后缀名是不必要的,后缀名表格式,属“表示层”范畴,而 URL 仅说明资源的位置。那么具体的资源表示(resource representation)应该放在何处呢?通过 HTTP 请求的头信息中用 accept 和 content-type 字段(比如为 text/html)指定,这两个字段是对“表现层”的描述;
- 状态转移(state transfer):访问一个网站,就代表了客户端和服务器的一个交互过程,客户端发出连接或者获取资源的请求,服务器给出响应。自然这个过程中,必然涉及到数据和状态的转化;
- http 的第二个 t 就表示 transfer,转移;
- 互联网通信协议HTTP协议,是一个无状态(stateless)协议。这意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生”状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是”表现层状态转化”。
- 客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。