【TechTarget中国原创】REST实质上是一门Web服务架构的哲学,它并不是一个像SOAP的标准。它以严谨精确的诠释HTTP1.1规则中规定的不同操作的作用以及GET、PUT、POST、DELETE和一些其它特征为重点。两年前我在这篇文章中便讨论过REST的特点,自从那时起我们已经看到持续增长的支持REST方式的服务,如Amazon的S3服务和google的Data APIs。
由于SOAP相关标准变得越来越复杂,开发人员开始关注REST,这种对REST的热衷,导致越来越多的服务都被称为RESTful,而事实上它们只是另一种形式的RPC。例如严格的说,GET操作只表示资源的获取而不是更改。ACTIVEMQ开源信息服务器可以通过GET操作读取消息,但若在读取之后删除消息,则需要RESTful接口。你可以在开发者的BLOG和论坛中查找到很多关于一个特殊的服务是否是REST的论证。简单来说,我始终遵守Fielding的最初的构想与HTTP1.1的规范。
RESTful体系结构概要
下述表格,在Fielding的学术论文中表5.1中,结合最新web例子给出了RESTful架构中的各种不同的数据元素。HTTP1.1协议提供了在Web服务中可以潜在使用的很多特性。例如,那些能够在一个请求中读取和使用if-modified-since标头的服务能够避免重复输出不变资源。有些返回某个图片的服务应该能够解释接受HTTP标头返回给客户端的首选资源类型。这似乎有理由期待对RESTful web服务的任何正式的描述语言应该尽可能多的覆盖这些“数据元素”。

怎样去描述一个REST服务
目前,大的服务如Yahoo、Amazon、Google和Flickr主要通过提供文字描述及代码例子让潜在的开发人员了解他们的HTTP服务接口,这足能证明虽然能够创建许多代码例子,但还是缺少专业的氛围让我们留意到正式的规范,这阻止了我们使用自动化测试工具和正式的SOA相关定义。
Web服务描述语言—WSDL
WSDL 1.0版本最初被发布为一个W3C的“注释”而不是标准,(1.1版本在2001年发布这个时候RESTful风格的Web Service还没有流行起来),在很多工具箱中被使用进行SOAP服务和客户端开发,但仍然没有提供REST风格服务的描述。
WSDL 2.0版在2007年6月被作为一个W3C的推荐标准发布,在这个版本中试图包容和适应REST,但还是继续突出强调SOAP。这个发布版本中甚至都没有提供一个REST风格服务的例子,但幸运的是我在Wikipedia上找到一篇使用WSDL描述RESTful风格接口的例子,在这篇文章中把许多REST风格的Http请求映射到SOAP上,但是没有预先定义好在返回数据时怎样选择资源类型。我猜测这种方式只能用在你不得不同时使用SOAP和REST来发布同一个服务的时候。REST开发社区对WSDL 2.0版本的最初反应并不是很热情。
Web应用程序描述语言—WADL
WADL试图把基于HTTP的服务定义为人机可读,并且不再像他需要的那么复杂的XML格式描述语言。今年二月刚发布了最新的WADL规范草案的修订版,其中包含了几个重要的变化。很明显,关于一些有用的特性,基于Jersey(JAX-RS的参考实现)的符合REST(REpresentational State Transfer:表述性状态转移)的服务工具包的经验正在提供反馈信息。因此这并不是一个实体意义上的标准集。WADL规范主要立足于怎样书写一个符合REST的Web服务的以下特性:
·提供的资源以及如何为每一个资源构造URL
·支持的HTTP方法(GET、POST等等)
·请求中包含的参数和他们的基于XML Schema的类型
·响应的表示(媒体类型)
·简单的文本文件或者是XHTML(eXtension HTML)标记文件格式的附件
总结
WSDL和WADL都不会涉及到Fielding博士在他论文中所述的符合REST服务的方方面面。REST能够提供的一些很重要的特性根本就没有提到。许多人正在兴致勃勃地探索不需要拘泥于一种标准描述语言符合REST的服务。我个人认为,尽管WSDL能够在一些简化的应用场景下工作,但是,把需要描述所有REST样式操作的参数填充到2.0版本的WSDL里也许是不可能的。WADL是一个很好的语言,但是它的详细说明和工具还没有被开发出来。