REST和SOAP:谁更好,或者都好?

    现在,Web开发者的可选技术至关之多;从简化的数据库访问技术,到易用的中间件服务包装技术,以及各类有趣的客户端软件等等,包罗万象。全部这些产品和工具,都是为了帮助Web开发者用最快的速度开发出最好的Web应用。 

然而,拥有大量可选软件方案以及为Web应用的特定部分选用特定方案,都是具备挑战的事;并且,如今Web开发者必须持续跟踪各类不断变化着的标准与方法。 

举个例子,Web服务技术就有SOAP(Simple Object Access Protocol,简单对象访问协议)和REST(Representational State Transfer,表示性状态转移)这两种方案。它们都是有效的方案,但在具体场合下采用哪一种方案好,这要取决于Web开发者。 

目前,大部分Web开发者彷佛都了解REST——一种采用标准URI进行调用的方案。REST很容易理解,并且只要是支持HTTP/HTTPS的客户端 /服务器就支持它。你能够用HTTP GET方法来执行命令。因此,开发者们感觉到的REST的优点是:开发简单、只需依托现有Web基础设施、以及学习成本低。 

然而,SOAP做为一种古老的Web服务技术,短时间内还不会退出历史舞台。并且,随着SOAP 1.2的出现,SOAP印象中的一些缺点已获得改进,采纳率和易用程度也都获得提升。另需注意的是,从W3C SOAP 1.2版开始,SOAP这一缩写再也不表明Simple Object Access Protocol(简单对象访问协议),而是仅仅做为协议名称而已。 

相对REST而言,SOAP 1.2多出一些开销,不过这些开销也带来了一些好处。首先,SOAP在三个方面离不开XML(Extensible Markup Language,可扩展标记语言):SOAP信封(envelope)是基于XML的,它定义了消息里有什么以及如何处理它;一套用于数据类型的编码规则;过程调用和响应的规划。SOAP信封由传输协议(HTTP/HTTPS)发出,RPC(Remote Procedure Call,远程过程调用)获得执行,而后一个XML文档随SOAP信封返回。 

须要注意的是,基于“通用”传输协议是SOAP的一个优势。REST目前基于HTTP/HTTPS;而SOAP可支持任何传输协议,从HTTP /HTTPS到SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),甚至JMS(Java Messaging Service,Java消息传递服务)。不过,因为XML较为冗长且解析费时,所以采用XML也成为一个弊端。 

不过,对Web开发者来讲的好消息是,目前上述两种方案都是行之有效的方案。REST和SOAP都能解决许多Web方面的问题与挑战,并且在许多状况下,它们各自都能知足开发者的要求,也就是说可互换使用。 

但不少人不知道,这两种技术能够混合搭配使用。REST很好理解,且极易上手;不过因为它缺少标准,所以只被看做是一种架构方法。与之相比,SOAP是一个工业标准,它具有良好定义的协议,以及一套良好确立的规则,在大型和小型系统中均有采用。 

所以,REST的适用场合包括: 

有限的带宽和资源 别忘了返回的结构能够采用(由开发者定义的)任何格式。另外,因为REST采用标准的GET、PUT、POST和DELETE动词,所以可被任何浏览器所支持。除此之外,REST还可使用为目前大多数浏览器支持的XMLHttpRequest对象,这为AJAX增色很多。 
彻底无状态的操做 对于那些需多步执行的操做,REST并不是最佳选择,采用SOAP更合适。可是,若是你须要无状态的CRUD(Create/Read/Update/Delete,建立/读取/更新/删除)操做,那么应采用REST。 
缓存考虑 若要利用无状态操做的特性,使得信息可被缓存,那么REST是很好的选择。 
以上已经覆盖不少方案了,那么,为何还要考虑SOAP呢?正如前述,SOAP比较成熟并且是通过良好定义的,具备完整的规范。而REST只不过是一种方法,对开发未做任何规约;所以,假如你遇到如下场合,那么SOAP是最佳选择: 

异步处理与调用 若是你的应用须要确保可靠性与安全性,那么请采用SOAP。SOAP 1.2为确保这种操做补充定义了WSRM(WS-Reliable Messaging)等标准。 
形式化契约 若提供者/消费者双方必须就交换格式取得一致,那么采用SOAP更合适。SOAP 1.2为这种交互提供了严格的规范。 
有状态的操做 若是应用须要上下文信息与对话状态管理,那么应采用SOAP。SOAP 1.2为此补充定义了WS-Security、WS-Transactions和WS-Coordination等标准。相比之下,REST方法要求开发者本身来实现这些框架性工做。 
正如你所看到的,REST和SOAP各自有其用武之地。它们在安全性和传输层等方面有着本身的潜在问题,不过它们都能完成任务,并且在许多状况下,它们都丰富了Web的技术手段。所以,就这一论题,其实最好的原则就是灵活性原则;由于至少在现今的Web开发中,不管面对何种问题,Web开发者们总有办法运用好这两种技术中的一种。 

关于做者 
Mike Rozlog是Embarcadero科技公司的高级产品主管。他的主要工做是确保Embarcadero公司推出开发工具知足全世界开发者们的指望。他的大部分时间被致力于从技术和业务两个方面来介绍讲解Embarcadero的产品与服务,其听众是遍及全球分析师及其余听众。Mike曾工做于 CodeGear,一个于2008年被Embarcadero收购的开发工具团队。以前,他为Borland公司工做了八年,担任过包括首席技术架构师在内的许多职位。做为一名知名做者,Mike出版了不少书。他最近的做品《Mastering JBuilder》已由John Wiley & Sons出版。数据库

相关文章
相关标签/搜索