`

RESTful Webservice 和 SOAP Webserivce 对比及区别

 
阅读更多
RESTful Webservice 和 SOAP Webserivce 对比及区别
接口抽象

RESTful Web 服务使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 来抽象所有 Web 系统的服务能力,而不同的是,SOAP 应用都通过定义自己个性化的接口方法来抽象 Web 服务,这更像我们经常谈到的 RPC。例如本例中的 getUserList 与 getUserByName 方法。

RESTful Web 服务使用标准的 HTTP 方法优势,从大的方面来讲:标准化的 HTTP 操作方法,结合其他的标准化技术,如 URI,HTML,XML 等,将会极大提高系统与系统之间整合的互操作能力。尤其在 Web 应用领域,RESTful Web 服务所表达的这种抽象能力更加贴近 Web 本身的工作方式,也更加自然。

同时,使用标准 HTTP 方法实现的 RRESTful Web 服务也带来了 HTTP 方法本身的一些优势:

无状态性(Stateless)
HTTP 协议从本质上说是一种无状态的协议,客户端发出的 HTTP 请求之间可以相互隔离,不存在相互的状态依赖。基于 HTTP 的 ROA,以非常自然的方式来实现无状态服务请求处理逻辑。对于分布式的应用而言,任意给定的两个服务请求 Request 1 与 Request 2, 由于它们之间并没有相互之间的状态依赖,就不需要对它们进行相互协作处理,其结果是:Request 1 与 Request 2 可以在任何的服务器上执行,这样的应用很容易在服务器端支持负载平衡 (load-balance)。

安全操作与幂指相等特性(Safety /Idempotence)
HTTP 的 GET、HEAD 请求本质上应该是安全的调用,即:GET、HEAD 调用不会有任何的副作用,不会造成服务器端状态的改变。对于服务器来说,客户端对某一 URI 做 n 次的 GET、HAED 调用,其状态与没有做调用是一样的,不会发生任何的改变。

HTTP 的 PUT、DELTE 调用,具有幂指相等特性 , 即:客户端对某一 URI 做 n 次的 PUT、DELTE 调用,其效果与做一次的调用是一样的。HTTP 的 GET、HEAD 方法也具有幂指相等特性。

HTTP 这些标准方法在原则上保证你的分布式系统具有这些特性,以帮助构建更加健壮的分布式系统。

安全控制

为了说明问题,基于上面的在线用户管理系统,我们给定以下场景:

参考一开始我们给出的用例图,对于客户端 Client2,我们只希望它能以只读的方式访问 User 和 User List 资源,而 Client1 具有访问所有资源的所有权限。

如何做这样的安全控制?

通行的做法是:所有从客户端 Client2 发出的 HTTP 请求都经过代理服务器 (Proxy Server)。代理服务器制定安全策略:所有经过该代理的访问 User 和 User List 资源的请求只具有读取权限,即:允许 GET/HEAD 操作,而像具有写权限的 PUT/DELTE 是不被允许的。

如果对于 REST,我们看看这样的安全策略是如何部署的。如下图所示:


图 4. REST 与代理服务器 (Proxy Servers)

一般代理服务器的实现根据 (URI, HTTP Method) 两元组来决定 HTTP 请求的安全合法性。

当发现类似于(http://localhost:8182/v1/users/{username},DELETE)这样的请求时,予以拒绝。

对于 SOAP,如果我们想借助于既有的代理服务器进行安全控制,会比较尴尬,如下图:


图 5. SOAP 与代理服务器 (Proxy Servers)

所有的 SOAP 消息经过代理服务器,只能看到(http://localhost:8182/v1/soap/servlet/messagerouter, HTTP POST)这样的信息,如果代理服务器想知道当前的 HTTP 请求具体做的是什么,必须对 SOAP 的消息体解码,这样的话,意味着要求第三方的代理服务器需要理解当前的 SOAP 消息语义,而这种 SOAP 应用与代理服务器之间的紧耦合关系是不合理的。

关于缓存

众所周知,对于基于网络的分布式应用,网络传输是一个影响应用性能的重要因素。如何使用缓存来节省网络传输带来的开销,这是每一个构建分布式网络应用的开发人员必须考虑的问题。

HTTP 协议带条件的 HTTP GET 请求 (Conditional GET) 被设计用来节省客户端与服务器之间网络传输带来的开销,这也给客户端实现 Cache 机制 ( 包括在客户端与服务器之间的任何代理 ) 提供了可能。HTTP 协议通过 HTTP HEADER 域:If-Modified-Since/Last- Modified,If-None-Match/ETag 实现带条件的 GET 请求。

REST 的应用可以充分地挖掘 HTTP 协议对缓存支持的能力。当客户端第一次发送 HTTP GET 请求给服务器获得内容后,该内容可能被缓存服务器 (Cache Server) 缓存。当下一次客户端请求同样的资源时,缓存可以直接给出响应,而不需要请求远程的服务器获得。而这一切对客户端来说都是透明的。


图 6. REST 与缓存服务器 (Cache Server)

而对于 SOAP,情况又是怎样的呢?

使用 HTTP 协议的 SOAP,由于其设计原则上并不像 REST 那样强调与 Web 的工作方式相一致,所以,基于 SOAP 应用很难充分发挥 HTTP 本身的缓存能力。


图 7. SOAP 与缓存服务器 (Cache Server)

两个因素决定了基于 SOAP 应用的缓存机制要远比 REST 复杂:

其一、所有经过缓存服务器的 SOAP 消息总是 HTTP POST,缓存服务器如果不解码 SOAP 消息体,没法知道该 HTTP 请求是否是想从服务器获得数据。

其二、SOAP 消息所使用的 URI 总是指向 SOAP 的服务器,如本文例子中的 http://localhost:8182/v1/soap/servlet/messagerouter,这并没有表达真实的资源 URI,其结果是缓存服务器根本不知道那个资源正在被请求,更不用谈进行缓存处理。

关于连接性

在一个纯的 SOAP 应用中,URI 本质上除了用来指示 SOAP 服务器外,本身没有任何意义。与 REST 的不同的是,无法通过 URI 驱动 SOAP 方法调用。例如在我们的例子中,当我们通过

getUserList SOAP 消息获得所有的用户列表后,仍然无法通过既有的信息得到某个具体的用户信息。唯一的方法只有通过 WSDL 的指示,通过调用 getUserByName 获得,getUserList 与 getUserByName 是彼此孤立的。

而对于 REST,情况是完全不同的:通过 http://localhost:8182/v1/users URI 获得用户列表,然后再通过用户列表中所提供的 LINK 属性,例如 <link>http://localhost:8182/v1/users/tester</link>获得 tester 用户的用户信息。这样的工作方式,非常类似于你在浏览器的某个页面上点击某个 hyperlink, 浏览器帮你自动定向到你想访问的页面,并不依赖任何第三方的信息。



总结

典型的基于 SOAP 的 Web 服务以操作为中心,每个操作接受 XML 文档作为输入,提供 XML 文档作为输出。在本质上讲,它们是 RPC 风格的。而在遵循 REST 原则的 ROA 应用中,服务是以资源为中心的,对每个资源的操作都是标准化的 HTTP 方法。

本文主要集中在以上的几个方面,对 SOAP 与 REST 进行了对比,可以看到,基于 REST 构建的系统其系统的扩展能力要强于 SOAP,这可以体现在它的统一接口抽象、代理服务器支持、缓存服务器支持等诸多方面。并且,伴随着 Web Site as Web Services 演进的趋势,基于 REST 设计和实现的简单性和强扩展性,有理由相信,REST 将会成为 Web 服务的一个重要架构实践领域。
分享到:
评论

相关推荐

    SOAP webserivce 和 RESTful webservice 对比及区别

    SOAP Web服务和RESTful Web服务是两种常见的Web服务交互方式,它们在设计理念、协议复杂度、数据格式和操作方式等方面存在显著的区别。 首先,SOAP(简单对象访问协议)是一种基于XML的协议,它允许不同系统之间的...

    RESTful webservice 和 SOAP webserivce 对比及区别

    RESTfulWebService和SOAPWebService对比及区别 RESTfulWebService和SOAPWebService都是Web服务架构模式,但它们在架构风格、接口定义、通信协议和实现技术等方面存在著明显的差异。 架构风格 RESTfulWebService...

    SOAP webserivce 和 RESTful webservice 对比及区别.pdf

    SOAP webserivce 和 RESTful webservice 对比及区别.pdfSOAP webserivce 和 RESTful webservice 对比及区别.pdf

    restful webservice in springMVC Demo

    RESTful服务通常使用HTTP方法如GET、POST、PUT、DELETE来操作资源,这与传统的Web服务(如SOAP)相比,更加简洁和高效。 在Spring MVC中,创建RESTful服务通常涉及以下几个步骤: 1. **配置Spring MVC**:在`web....

    RESTful WebService

    RESTful WebService是比基于SOAP消息的WebService简单的多的一种轻量级Web服务,RESTful WebService是没有状态的,发布和调用都非常的轻松容易。 下面写一个最简单的Hello World例子,以便对RESTful WebService有...

    Java RESTful WebService实战

    Java restful和webservice接口, WebService有两种方式,一是SOAP方式,二是REST方式。SOAP是基于XML的交互,WSDL也是一个XML文档,可以使用WSDL作为SOAP的描述文件;REST是基于HTTP协议的交互,支持JSON、XML等交互...

    在同一个系统里用cxf 实现SOAP 协议和RESTful风格 两种类型的webservice接口

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,其中两种主要的接口类型是SOAP(Simple Object Access Protocol)和RESTful(Representational State Transfer)。本篇将详细讲解如何使用Apache CXF框架...

    基于Restful WebService的分布式应用开发研究.pdf

    3. WebService与RestfulWebService的对比:WebService是一种跨编程语言及操作系统的远程调用技术,通常被定义为一组模块化的简单对象访问协议,具有基于SOAP的API方式和基于REST的方式两种。而RestfulWebService是一...

    webservice -Restful的Demo

    RESTful WebService不再依赖于复杂的SOAP(Simple Object Access Protocol)消息结构,而是直接使用HTTP方法来表示操作。例如,使用GET请求获取资源,POST请求创建资源,PUT请求更新资源,以及DELETE请求删除资源。...

    Restful WebService + Spring

    主要用于创建基于SOAP的Web服务,虽然RESTful服务通常不涉及SOAP,但理解JAX-WS有助于对比和了解不同的Web服务风格。 总的来说,"Restful WebService + Spring"的结合使得开发人员能够利用Spring的强大功能和...

    cxf集成Spring的restful WebService接口

    通过分析和运行这些代码,你可以更直观地理解CXF与Spring的集成过程,并掌握创建RESTful WebService接口的方法。 总之,通过将CXF与Spring框架集成,我们可以利用Spring的强大功能来管理和配置服务,同时利用CXF的...

    java+soap+webservice 调用模拟

    通过阅读提供的"java-soap-webservice"文档,你可以进一步了解具体的实现步骤,包括如何设置项目、配置JAX-WS、生成客户端代码、编写调用服务的代码,以及如何解析响应。实践中,不断动手操作和调试是掌握这一技术的...

    基于 cxf 2.7.5 开发的 webservice [soap restful]

    【描述】本项目是使用Apache CXF 2.7.5版本实现的WebService服务,包括了SOAP和RESTful两种常见的Web服务接口。Apache CXF是一个开源的Java框架,它为构建和部署Web服务提供了强大的支持,使得开发者能够方便地创建...

    利用CXF发布restful WebService 研究

    Apache CXF是一个开源的Java框架,它提供了创建和消费Web服务的能力,包括SOAP和RESTful服务。这篇博客将深入探讨如何使用CXF来发布RESTful Web Service。 【描述】: 虽然描述中没有提供具体的信息,但从“NULL”...

    jax-ws jax-rs 分别创建soap和restful类型的webservice

    在提供的文件中,"jax-ws-webService创建soap类型的webservice.docx"应该包含了详细的JAX-WS SOAP Web服务创建过程,而"使用jax-rs创建restful类型的webservice接口.docx"则详细阐述了JAX-RS RESTful Web服务的实现...

    REST WebService与SOAP WebService的比较.docx

    **REST (Representational State Transfer) WebService 和 SOAP (Simple Object Access Protocol) WebService 是两种不同的 Web Service 技术,它们在 SOA(Service-Oriented Architecture,面向服务架构)领域中...

    cxf_restful_webservice

    通过这个项目,开发者可以学习如何在MyEclipse环境中配置和运行CXF RESTful Web服务,了解如何在Tomcat服务器上部署服务,以及如何设计和实现RESTful API。此外,还可以深入了解RESTful设计原则及其在实际项目中的...

    WebService的优势与劣势

    3. **灵活性高**:开发者可以根据需要选择使用SOAP或者RESTful API来实现WebService,这为应用程序提供了更多的灵活性。 4. **安全性**:可以通过HTTPS协议和其他安全机制确保数据传输的安全性。 5. **可扩展性强**...

    SOAP调用webservice例子

    **SOAP与RESTful API的对比** - SOAP是基于XML的,而RESTful API通常是基于JSON,后者更轻量级,解析速度更快。 - SOAP提供了一套完整的规范,包括错误处理、事务支持等,而RESTful API更灵活,但需要自定义这些功能...

    Soap方式调用WebService

    总结,SOAP方式调用WebService是分布式系统间通信的重要方式,理解其原理和实践方法对于开发和维护复杂的跨平台应用至关重要。在实际工作中,开发者需要根据项目需求选择合适的通信协议,并灵活运用各种工具和最佳...

Global site tag (gtag.js) - Google Analytics