REST与SOAP之比较 ——REST篇

 我有这样一个推断,在计算机世界中,但凡那些让开发人员记住的重要概念,都有一个很酷的名称首字母缩写,否则的话,开发人员很快就会将其抛之脑后。比如Ajax、SOAP以及REST就证明了这一点。

REST能够在计算机领域被广泛采用,它走的道路是不同寻常的。这个术语是由Roy Fielding创造的。Fielding毕业于Irvine市加利福尼亚大学,在他的博士学位论文中第一次提出了REST这个概念。在Web方面,我们必须承认Fielding是非常精通的,他曾经帮助创建HTTP 1.0规范,该规范从1996年开始就为Web提供基本准则。他在Web标准方面非常有经验,这为他的这篇博士论文奠定了坚实的基础。

  Fielding指出,使用且符合代表性状态传输(REST)设计约束的 Web 上部署的组件,可以充分利用 Web 的有用特性,万维网(World Wide Web)才能够达到最佳的工作效果。可以这样理解REST——当一个浏览器得到并且显示构成HTML页面的各个元素时,它正在获取资源的当前状态的表现形式。在Fielding的博士论文中,他列举了REST风格的设计约束,并且解释了为什么这些约束能够充分利用Web 的有用特性,使其达到最佳状态,以及这些约束的关键所在。同时,在论文中,他也包含了一些关于REST和某些目前的Web风格之间 “不符合”的讨论,以及这些Web风格是如何导致设计无法利用Web特性的。

  Fielding认为,对于使用HTTP承载应用程序协议穿越防火墙,XML-RPC 和SOAP所采用的方式是“从根本上被误导的概念。”它们所采用的方式违背了设立防火墙的概念,结果是,防火墙厂商为了保护系统需要侦察出所承载的协议。由于大多数SOAP应用程序使用HTTP都是为了穿越防火墙,因此,你可以发现REST与SOAP之间的冲突是从哪里开始的。Fielding认为,如果你打算使用HTTP的话,就应该与充分利用HTTP本身的含义。

  REST风格强调,通过有限的操作或者是“动词”以及一个组件之间的标准接口,也就是HTTP协议提供的借口,来提升客户与服务之间的交互。通过为每一个资源分配其自己的URL,来实现灵活性,REST可以调用包含上百个URI的资源类型的客户,其中的关键是REST能够给你无限多的“名词”。REST使用HTTP的动词——简单的良定义操作集:POST, GET, PUT,DELETE进行请求和响应,从而避免了歧义。举个例子,GET只能够简单地返回资源的表现形式,而不能够创建任何其他的内容。

  在Web发展的初期,由于人们都在试验通过收集各种不同来源的元素,从而把Web应用程序融合在一起,有大量这种Web服务的不成熟探索的例子——从HTTP页面中解析信息,用于页面创建者没有计划到的用途。这种“屏幕抓取”的Web类比表明,REST风格的方法是先于那些更加复杂的Web服务而出现的。

  REST是一种风格而不是一个标准

  你可能会把软件的架构风格当作对上层设计模式的抽象。然而,根据Fielding所说,设计模式的堆砌并不等同于架构风格,因为模式是非常接近于特定问题的。

  由于REST是超文本系统的一种风格,而不是Web服务的,因此,本文的标题“REST与SOAP之比较”就有些让人误解。然而,很多软件设计人员会将其混淆,他们在考虑如何创建Web服务时,会得出这样的结论:SOAP过于复杂,而简单的类似于REST的设计却更加适合。

REST与RPC风格之比较

  远程过程调用的架构,是应用在基于XML-RPC或者 RPC风格的SOAP的Web服务中的,它却有着完全不同的风格。客户端发出命令,以使服务做出特定的操作。换句话说,RPC有动词的倾向。

  REST强调资源(名词)有统一的接口以此来对它们寻址,而RPC强调过程(动词)有统一的接口来激发它们。一个基于RPC的架构,动词数量是没有限制的。REST说,我们使用四个动词——非常熟悉,HTTP标准的GET、POST、PUT以及DELETE——来进行请求和响应,REST使用资源寻址来处理其可变性。

  一个简单的REST举例

  假设我们希望一个Web服务暴露一部分目录,从这个目录中,用户将能够得到一些描述、图片、安装指令等等。为了得到数字“n1996-01”的描述,用户需要格式化一个GET请求,类似于下面的这个URL:

  http://company.com/catalog/description/n1996-01

  在处理这个请求时,“/catalog”将映射到一个服务中,之后,通过该服务对“description/n1996-01”进行解释,从而定位资源。在创建响应时,服务需要使用内容类型(Content-Type)的头文件来指定返回格式。在这种情况下,假定返回格式是HTML或者XML,客户端能够使用它来控制页面的布局。如果要得到图片,那么这个请求将对“/catalog/picture/n1996-01”进行寻址,返回的响应将是图片内容类型(Content-Type)。

  REST的商业应用

  最近几年,大多数Web商业企业开始对REST非常感兴趣。Google Data API(目前还在测试版本)专门使用REST规则来提供简单的协议。对服务的HTTP GET请求的响应结果是,采用Atom或者是RSS联合格式的XML数据。Google也使用Atom以及POST、PUT和DELETE操作来完成公共协议。eBay服务提供通过使用不同语言工具来访问服务,这些工具包括文档/文字风格的SOAP以及REST风格。

  那么,对于XML-RPC和SOAP所具有的RPC风格而言,REST风格是否是一个具有竞争力的替代者呢?当然,我决不这样认为,在下一篇文章中,我将尽量向大家展现SOAP所向无敌的领域。

你可能感兴趣的:(REST与SOAP之比较 ——REST篇)