霜天部落 | 关注LAMP高性能、高并发架构的设计与研究

什么是REST以及REST Web服务的特征

什么是REST?

REST是Roy Fielding在他的博士论文中提出的词汇,是对网络系统构架的一个描述。REST是表现性状态传输首字母缩写(Representational State Transfer)。

Roy Feilding这么解释表现性状态传输的意义:

“表现性状态传输试图描述一个设计优良的Web是如何运转的:用户在web网络(虚拟状态机)里通过点击链接处理应用(状态传输),结果就是传输并渲染下一个页面给用户(应用程序的下一个状态的表现性)。“

REST的目的

REST的目的是寻找让Web如此成功的特性。然后再使用这些特性指导Web变革。

REST是一个结构设计,而不是一个标准。

REST不是一个标准,你永远也不会看到W3C发布REST白皮书。你也不会看到微软或者IBM销售REST开发工具。为什么?REST它仅仅是一个结构设计而不是一个标准。你不能控制这个设计,你仅能够理解并且应用在你的Web服务中。(类似的C/S结构也是一种结构设计,而不是一个C/S标准)。

虽然REST不是一个标准,但它确实使用标准:

HTTP

URL

XML/HTML/GIF/JPEG等等(状态表现)

text/xml, text/html, image/gif, image/jpeg等等(MIME类型)

经典的REST系统

Web就是REST系统,有很多你使用了很多年的服务就是基于REST的Web服务,例如:订书服务、搜索服务、在线电子字典。

REST是关于Web的一张“大蓝图”,它不负责处理具体的执行细节(例如:使用Java还是CGI来实现一个Web服务)。所以让我们用REST“大蓝图”的观点来设计一个Web服务。

REST Web服务的特征

C/S结构:一个完全基于交互的设计

无状态:每个发送给服务器的信息必须包含服务器处理所需的所有信息,不能通过在服务器保存相关信息而获益。

缓存:为了提供网络的效率,响应必须标志出是否可以缓存。

统一的接口:所有的资源都可以通过一个通用的接口访问(例如:HTTP GET、POST、PUT、DELETE)。

命名的资源:组成系统的资源使用URL来命名。

互联资源表现性:资源的表现性通过URL实现互联,因此客户可以一个状态接着一个状态处理。

组件层:可以在客户和资源间插入用于提高效率,增强安全的的中间件,象代理服务、缓存服务、网关等。

REST Web服务设计原则

1、以REST网络建立Web服务的关键(例如Web)是确定想作为服务展现的所有概念化的实体。

2、为每个资源提供URL。资源应该是名词,不是动词

3、根据客户处理资源的方式分类,可以分为客户仅接收资源的表现性,客户能够修改(增加)资源。对于前者,提供HTTP GET方法访问。对于后者,提供HTTP POST、PUT和(或)DELETE。

4、所有通过HTTP GET访问的资源应该是无副作用的,也就是说,这些资源仅仅向客户返回一个资源的表现性,客户调用他们不应该对它们产生影响。

5、没有孤立的人,同样,没有孤立的表现性。换言之,在资源的表现性中提供链接,让客户能更深入的获取更多的信息,或者相关信息。

6、逐步的提供数据,不应该在一个文档里提供所有的内容,可以为更详细的信息提供链接。

7、使用模式(DTD、W3C Schema、RelaxNG或者Schematron)指定响应数据的格式。如果服务需要POST或PUT,也同样使用一个模式规定这些响应。

8、通过WSDL文档或者HTML页面描述如何调用你的服务。