`
sundful
  • 浏览: 1253215 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Restful与webService区别

 
阅读更多

      有好多人问我们在设计底层服务的时候到底是应该选择目前最流行的RestFul架构还是选择老牌的webService呢?今天我就将这两个概念做一下阐述,到底什么情况下选择什么比较合理。

      首先需要了解:REST是一种架构风格,其核心是面向资源;而webService底层SOAP协议,主要核心是面向活动;

      相关概念:

  SOAP

  什么是SOAP,我想不用多说,google一把满眼都是。其实SOAP最早是针对RPC的一种解决方案,简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等)。但是随着SOAP作为WebService的广泛应用,不断地增加附加的内容,使得现在开发人员觉得SOAP很重,使用门槛很高。在SOAP后续的发展过程中,WS-*一系列协议的制定,增加了SOAP的成熟度,也给SOAP增加了负担。

  REST

  REST其实并不是什么协议也不是什么标准,而是将Http协议的设计初衷作了诠释,在Http协议被广泛利用的今天,越来越多的是将其作为传输协议,而非原先设计者所考虑的应用协议。SOAP类型的WebService就是最好的例子,SOAP消息完全就是将Http协议作为消息承载,以至于对于Http协议中的各种参数(例如编码,错误码等)都置之不顾。其实,最轻量级的应用协议就是Http协议。Http协议所抽象的get,post,put,delete就好比数据库中最基本的增删改查,而互联网上的各种资源就好比数据库中的记录,对于各种资源的操作最后总是能抽象成为这四种基本操作,在定义了定位资源的规则以后,对于资源的操作通过标准的Http协议就可以实现,开发者也会受益于这种轻量级的协议。

  REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性。REST提出设计概念和准则为:

  1. 网络上的所有事物都可以被抽象为资源(resource)

  2. 每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识

  3. 所有的操作都是无状态的

  REST简化开发,其架构遵循CRUD原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建,获取,更新和删除就可以完成相关的操作和处理。我们可以通过统一资源标识符(Universal Resource Identifier,URI)来识别和定位资源,并且针对这些资源而执行的操作是通过 HTTP 规范定义的。其核心操作只有GET,PUT,POST,DELETE。由于REST强制所有的操作都必须是stateless的,这就没有上下文的约束,如果做分布式,集群都不需要考虑上下文和会话保持的问题。极大的提高系统的可伸缩性。

  SOAP webService有严格的规范和标准,包括安全,事务等各个方面的内容,同时SOAP强调操作方法和操作对象的分离,有WSDL文件规范和XSD文件分别对其定义。

  如果从这个意义上讲,是否使用REST就需要考虑资源本身的抽象和识别是否困难,如果本身就是简单的类似增删改查的业务操作,那么抽象资源就比较容易,而对于复杂的业务活动抽象资源并不是一个简单的事情。比如校验用户等级,转账,事务处理等,这些往往并不容易简单的抽象为资源。

  其次如果有严格的规范和标准定义要求,而且前期规范标准需要指导多个业务系统集成和开发的时候,SOAP风格由于有清晰的规范标准定义是明显有优势的。我们可以在开始和实现之前就严格定义相关的接口方法和接口传输数据。(很多情况下是为了兼容以前项目且前台调用逻辑代码都不能动的前提下,更改底层应用,一般就需要使用webService模式开发,因为老代码中已经有了明确的方法定义以及参数类型、个数等申明)

  简单数据操作,无事务处理,开发和调用简单这些是使用REST架构风格的优势。而对于较为复杂的面向活动的服务,如果我们还是使用REST,很多时候都是仍然是传统的面向活动的思想通过转换工具再转换得到REST服务,这种使用方式是没有意义的。

 

 

 

分享到:
评论

相关推荐

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验 本实验的主要目标是使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验。下面是实验的详细介绍: 标题...

    SOAP webserivce 和 RESTful webservice 对比及区别

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

    用CXF开发RESTful风格WebService

    用CXF开发RESTful风格WebService.doc

    restful风格webservice代码

    在本项目中,"restful风格webservice代码"是一个商业项目测试用的源代码实现,它展示了如何利用RESTful原则来构建Web服务,同时包含了JSON数据的压缩解压以及加密解密功能。 REST(Representational State Transfer...

    restful webservice in springMVC Demo

    这篇博客"restful webservice in springMVC Demo"旨在展示如何在Spring MVC中创建RESTful Web服务,并通过客户端进行调用。 首先,我们要理解REST(Representational State Transfer,表述性状态转移)的基本概念。...

    cxf_restful_webservice

    本项目“cxf_restful_webservice”着重于使用CXF来创建RESTful风格的Web服务。REST(Representational State Transfer)是一种轻量级的Web服务设计模式,它强调通过HTTP协议暴露资源,使得服务更易于理解和使用。 ...

    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等交互...

    restful-webService

    在这个项目中,"restful-webService" 提供了一个框架,用于构建RESTful风格的服务,包括客户端和服务端两大部分。这个框架允许开发者专注于业务逻辑,而无需从零开始实现所有基础结构。 1. **RESTful原则**: REST...

    restful——webservice

    3. 可集成性:Restlet能够无缝集成到Spring等流行框架中,方便地与企业级应用结合。 实现RESTful Web服务的具体步骤包括: 1. 使用Restlet框架:在项目中引入Restlet库,创建Web工程,并配置服务器环境(如Tomcat...

    webservice -Restful的Demo

    **WebService与RESTful简介** WebService是一种通过网络在不同系统间交换数据的方式,它基于开放标准,如XML(可扩展标记语言)和WSDL(Web服务描述语言),使得应用程序能够跨越不同的平台进行通信。WebService的...

    RESTFul WebService

    在Web服务领域,RESTful已经成为构建可扩展、高性能和易于理解的API的标准方法。本资料集主要针对想要深入理解和实践RESTful风格的开发者。 首先,理解REST的核心概念至关重要。REST是一种架构风格,其核心思想是将...

    Springboot入门demo(实现restfulApi和webservice)

    springboot入门demo...实现了restful api和webservice两种接口方式。(可通过postman或soupui进行测试。) 同时包含了Junit测试webservice。 Demo是经过亲测完全可以跑起来。通过此demo可对springboot有个入门的理解

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

    1. 定义服务接口:使用Java语言定义服务接口,并使用JAX-WS注解(如`@WebService`)进行标记。 2. 实现服务端点:创建实现服务接口的类,处理客户端请求。 3. 配置CXF:在Spring配置文件中,配置CXF的Servlet,指定...

    CXF restful风格WebService

    **二、CXF与RESTful** Apache CXF不仅支持传统的SOAP Web服务,也支持RESTful风格的服务。使用CXF开发RESTful服务,我们可以利用JAX-RS(Java API for RESTful Web Services)规范,它是Java平台上的RESTful服务...

    restful,非常好的webservice

    restful,非常好的webservice

    spring,cxf,restful发布webservice传递List,Map,List<Map>

    为了更好地理解这个过程,可以从提供的"webservice"压缩包文件中查看示例代码。通常,这个压缩包可能包含以下内容: - 服务端的Spring Boot项目,包括pom.xml配置文件、服务接口和实现类、CXF配置等。 - 客户端示例...

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

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

Global site tag (gtag.js) - Google Analytics