天天看点

RESTful 架构与 RESTful 服务

风格 ⇒ 标准 ⇒ 协议 ⇒ 实现

representational state transfer,是一种软件架构风格,既然是风格,就非标准或协议,而是定义了一组设计原则和约束条件。具有如下特点:

适用于客户端和服务器交互类的软件;

基于该风格设计的软件更简洁,更有层次,更易于实现缓存等机制;

在rest中,每一个对象都是通过 url 来表示的

网站即软件,是一种新型的软件。

作为软件的网站是一种互联网软件,采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,

具有高延时(high latency,受制于带宽)、高并发的特点;

软件开发一般针对单机环境,网络则主要研究系统之间的通信;

restful 架构的提出,使得网站越来越多地具有软件的属性,通过风格的限制和约束,也使得网站开发能够按照软件开发的方式进行开发。

rest,representational state transfer,表现层状态转化(还记得 osi 7层网络模型吗,在网络层、传输层之上又细分为会话层(session layer),表示层(presentation layer))。

RESTful 架构与 RESTful 服务

资源(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用来删除资源。

理解restful架构