REST vs. SOAP
REST和SOPA争论很多,现在一些公司采取一个折中的策略,在内部使用REST接口,而对外使用SOAP服务,因为SOAP接口诞生比较早,比较普遍。
DZone一篇文章对目前REST和SOAP存在的误解进行了分析,目前认为REST存在三个难点:
1.没有一个良好的基于API的架构
2.难以整合。
3.没有被第三方广泛使用。
有人甚至认为2009年将是SOAPy故事,一些Web2.0公司将从REST向SOAP转移。
比较中立的观点是:WSDL ==服务,REST ==CRUD,REST是否能做服务呢?
我个人观点:关键在于对服务粒度的定义,SOA需要的粗粒度服务,不需要CRUD这样细粒度服务,但是REST提供不是CRUD,比CRUD更多,CRUD只是一种统一接口,就象SOAP是SOA的一种统一接口。这个问题就象DDD和SOA区别一样,REST资源与DDD的领域模型更接近,互为映射,
http://www.jdon.com/jivejdon/thread/34676)。
该文也认为:
REST能让您更简单地存取数据(如果你的服务比较简单); WSDL中为您提供了一个接口,这个接口界面更为复杂,而REST是更加灵活。
使用REST好处:
1.通过暴露自己的RESTful框架服务将允许其客户选择较简单的基于浏览器应用的集成。
2.REST客户端可以指定它可以理解的格式,通过http缓存提高性能,本质上更有效地marshal和unmarshal(如protobuf或JSON + GZip压缩)。
关于如何克服前面提到的三个难点?该文提出了自己的想法:
1. 目前大家对REST API已经越来越来有统一的认识,比如How to GET a cup of coffee就是一篇经典的REST架构使用。
2. 关于整合问题不是问题,只要你有合适的工具,比如使用浏览器等就能够无缝集成到一个应用程序的其他服务。将不断创造新的工具,以便更容易集成。
3. 关于第三方整合,目前可以提供REST和SOAP的混合接口方式,现在很多Web服务工具已经拓展提供REST支持。
如AIXS 2的RESTful Web services Support