表征状态转移(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。
目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。
三种主流的Web服务实现方案:
1,表征状态转移(英文:Representational State Transfer,简称REST),
2,简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是一种标准化的通讯规范,主要用于Web服务(web service)中。
3,XML-RPC是一个远程过程调用(远端程序呼叫)(remote procedure call,RPC)的分布式计算协议,通过XML将调用函数封装,并使用HTTP协议作为传送机制
。后来在新的功能不断被引入下,这个标准慢慢演变成为今日的SOAP协定。
何为REST,
REST 从资源的角度来观察整个网络,认为分布在网络各处的资源由URI确定,而客户端的应用通过URI来获取资源的Representational(有的翻译成表征或具象),获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移(Representational State Transfer)。
REST是设计风格而不是标准。
REST原则(The REST architectural style constrains):
Ø 统一接口(unifrom interface)
Ø 所有的事物都是资源且通过URI来使用资源
(data and functionality are considered resources,and these resources are accessed using URIs,typically links on the web)
Ø 客户端和服务器结构
Ø 使用无状态的通信协议如HTTP
(constrains an architecture to a client-server architecture ,and is designed to use a stateless communication protocol ,typically HTTP)
Ø 对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
Ø 资源的多重表现形式,可以是XML或者HTML当然也可以是任何其他的格式。
通过操作资源的表现形式来操作资源。
Ø 能够利用Cache机制增进性能
Ø 层次化的系统
Ø 随需代码 - Javascript (可选)
RESTful Web 服务
符合以上REST原则的Web 服务就是一个RESTful Web 服务(也称为 RESTful Web API)
RESTful Web 服务(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。它从以下三个方面资源进行定义:
- URI,比如:
http://example.com/resources/
。 - Web服务接受与返回的互联网媒体类型,比如:JSON,XML ,YAML 等。
- Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。
构建 RESTful 应用程序的最困难的部分在于确定要公开哪些资源。解决了这个问题之后,再使用开源 Restlet 框架构建 RESTful Web 服务就是小菜一碟了。
该表列出了在实现RESTful Web 服务时HTTP请求方法的典型用途。
HTTP 请求方法在RESTful Web 服务中的典型应用[1]
资源 |
GET |
PUT |
POST |
DELETE |
一组资源的URI,比如http://example.com/resources/ |
列出 URI,以及该资源组中每个资源的详细信息(后者可选)。 |
使用给定的一组资源替换当前整组资源。 |
在本组资源中创建/追加一个新的资源。 该操作往往返回新资源的URL。 |
删除 整组资源。 |
单个资源的URI,比如http://example.com/resources/142 |
获取 指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等) |
替换/创建 指定的资源。并将其追加到相应的资源组中。 |
把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。 |
删除 指定的元素。 |
PUT 和 DELETE 方法是幂等方法。GET方法是安全方法 (不会对服务器端有修改,因此也是幂等的)。
不像基于SOAP的Web服务,RESTful Web服务并没有的“正式”标准[2]。 这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但在实现RESTful Web服务时可以使用其他各种标准(比如HTTP,URL,XML,PNG等)。
(HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传(传参形式),这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。)
HTTP不是一种传输协议(transport protocol),而是一种应用协议(application protocol)。它采用TCP作为下层传输(underlying transport),但它拥有自己的语义(否则它就没什么用处了)。仅将HTTP作为传输,是不恰当的。
URIs:(Uniform Resource Id entifiers)
个人总结:
1,REST是ROA的,跟SOAP WEB服务架构不同。
REST架构是以资源为中心的,它推崇发挥HTTP协议至极致而不是仅将HTTP作为传输协议来用(如像我过去的WEB服务架构中只用HTTP的POST、GET方法或在SOAP仅用了HTTP的POST方法来传递数据)
REST充分利用HTTP的GET、POST、PUT、Delete方法来实现对资源的操作,利用HTTP的Cache机制来轻松实现了REST的缓存
2,REST用到WADL,SOAP用到了WSDL,WADL是以资源为中心的,WSDL是以操作(接口)为中心
3,资源间的互动是通过链接(link)来实现的
4,其实REST并不擅长于面向事务的应用,擅长于在面向资源的应用。
5,REST中的WADL仅支持HTTP协议,SOAP支持HTTP,FTP,SMTP,MQ等
posted on 2012-05-21 20:45
jimmy2009 阅读(155)
评论(0) 编辑 收藏 所属分类:
分析设计