1. SOAP WS 和RESTful Web Service之间有什么不同呢?
1.SOAP WS支持既远程过程调用(例如,RPC)又支持消息中间件(MOM)方式进行应用集成。
Restful Web Service仅支持RPC集成方式。
2.SOAP WS是传输协议无关的。它支持多种协议,比如,HTTP(S)、 Messaging、TCP、UDP SMTP等。
REST是协议相关的,只支持HTTP或者HTTPS协议。
3.SOAP WS仅允许使用XML数据格式。定义的操作通过POST请求发送。其重点是通过操作名来获取服务,并将应用逻辑封装为服务。
REST方式则允许多种数据格式,例如,XML、JSON、文本、HTML等等。而且由于REST方式采用标准GET、PUT、PSOT和DELETE 方法,因此所有的浏览器都可以支持。其重点是通过资源名来获取服务,并将数据封装为服务。AJAX支持REST方式,它可以使用XMLHttpRequest对象。无状态CRUD操作(创建、读、更新和删除)更加适合这种方式。
4.无法缓存SOAP方式读取的内容。
REST方式的则可以,而且性能和可扩展性都更好一些。
5.SOAP WS支持SSL和WS-security,针对企业级应用可以有更多的安全保障,例如按需提升安全指数、通过第三方来保证身份认证信息的安全性、除了点到点SSL(point to point SSL)之外,更针对消息的不同部分来提供不同的保密算法等等。
REST只支持点到点SSL。而且无论是不是敏感消息,SSL都会加密整条消息。
6.SOAP对于基于ACID的短寿命事务管理以及基于补偿事务管理的长寿命事务有深入的支持。同时,SOAP也支持分布式事务(译者:在一个分布式环境中涉及到多个资源管理器的事务)的两阶段提交(two-phase commit)方式。
REST由于基于HTTP协议,因此对于事务处理既不兼容ACID方式也不提供分布式事务的两阶段提交方式。
7.即便是要通过SOAP的第三方程序,SOAP通过内置的重试逻辑也可以提供端到端可靠性。REST没有一个标准的消息系统,因而寄希望于客户通过重连去解决通信失败问题。
2.如何选择采用哪种Webservice?SOAP WS还是REST?
一般而言,基于REST的Web service的优势在于其简单、性能不错、可扩展性好,并且也支持多种数据格式。
SOAP则适用于安全性和事务处理可靠性方面要求比较高的服务中。
1.所提供的服务会暴露数据或者业务逻辑吗?(如果会暴露数据的话可以选择REST方式,如果会暴露业务逻辑的话可以选择SOAP WS)。客户或者服务提供商需要一个正式的契约(contract)吗?(SOAP可以通过WSDL(WebService Description Language)提供一个正式契约)
2.需要支持多种数据格式吗?
3.需要进行AJAX调用吗?(REST可以采用XMLHttpRequest来发送AJAX调用)
4.同步调用还是异步调用?
5.有状态调用还是无状态调用?(REST适合无状态CRUD操作)
6.对于安全性的要求?(SOAP WS对于安全性的支持更好些)
7.对于事务处理的要求?(SOAP WS这方面更有优势)
8.有带宽限制吗?(SOAP消息比较冗长)
9.哪种方式更适合开发者呢呢?(REST更好实现,也更好测试和维护)
3.有什么可以用来测试WebService的工具吗?
测试SOAPWS可以使用SoapUI,测试RESTFul service可以采用Firefox的“poster”插件。
4.如果可以使用传统的中间件方式,例如,RPC、CORBA、RMI和DCOM,为什么还要选择Web service?
传统的中间件跟应用关系紧密,对应用的任何修改都可能会引起对应中间件的修改。因此这种方式下应用不好维护,复用性也比较差。一般情况下也无法支持异质系统(heterogeneity)。另外,采用这种方式应尽量避免互联网访问应用。还有,这种方式代价更高并且可用性差。
Webservice采用松耦合连接,即在客户端和服务器端之间提供了一个抽象层。这种松耦合应用可以减少维护成本并增加可复用性。Web service提供了一种基于XML和Web的新的中间件形式。Web service是语言和平台无关的,任何语言都可以用来开发一个Web service,并且部署到任何平台上,包括小型设备到大型超级计算机。Webservice采用语言无关协议,例如HTTP,并且通过WebAPI来在不同的应用程序之间传输XML消息。Webservice可以通过互联网访问,开销少并且可用性好。