有好多人问我们在设计底层服务的时候到底是应该选择目前最流行的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服务,这种使用方式是没有意义的。

Restful与webService区别相关推荐

  1. Java笔记-构造RESTful的WebService

    Spring Boot提供了企业级构建RESTful的webService应用 Maven添加依赖 <dependency><groupId>org.springframewo ...

  2. JAXWS和JAXRS(REST)开发WebService区别

    我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript ...

  3. REST和RESTful有什么区别

    REST系统和RESTful系统之间有什么区别? 从我最常阅读的几件事中,所谓的REST服务实际上就是RESTful服务. 那么两者之间有什么区别. #1楼 " REST服务"和& ...

  4. 前端基础知识学习 XML JSON RESTFUL SOAP WEBSERVICE

    目录 一.Web Services 应用程序组件 什么是Web Services? 它如何工作? Web services 平台的元素: 二.SOAP 简易对象访问协议 通信协议 什么是 SOAP? ...

  5. MVC,WebAPi,WebService区别

    被别人提问记录 大家好,我是你们的好朋友程序猿:铭文 一.MVC和webapi的区别. 一.webapi和webservice的区别. 大家好,我是你们的好朋友程序猿:铭文 先简单的说下:昨天一位朋友 ...

  6. SpringMVC应用和RESTful应用的区别

    SpringMVC应用的控制器需要依赖表现层(view)技术,在服务端把数据渲染成html后返回给浏览器,而RESTful应用的控制器直接返回一个对象,这个对象会被spring转成json格式写到ht ...

  7. RESTful的WebService方位wadl找不到页面

    在使用cxf发布RESTful风格的webSevice,项目发布成功,也能正确的调用接口,但是就是访问不到http://localhost:8080/Service/rest?_wadl 原因分析 c ...

  8. restful风格webservice wadl报错

    最近在项目中整合webservice接口时发现方法可以正常调用,但请求wadl总是报错,以下是报错信息: [org.apache.cxf.phase.PhaseInterceptorChain] - ...

  9. webservice接口与restful接口

    webservice接口与restful接口的区别: 1.接口调用方式: webservice接口:soap报文,<尖括号>, restful接口:json文件,"双引号&quo ...

最新文章

  1. 谷歌大神Jeff Dean点赞网红博士论文:改进分布式共识机制 | 技术头条
  2. Python基本语法_文件操作_读写函数详解
  3. python 书 推荐-推荐几本Python书
  4. Objective-C设计模式——生成器Builder(对象创建)
  5. [转]几句不可不看的经典人生语句
  6. 【转】如何设计动态(不定)字段的产品数据库表?
  7. 你的Wi-Fi 还安全吗?全球重大漏洞WPA2 KRACK 详细分析报告
  8. 新闻发布系统类图_如何熟悉一个系统?(内含知识大图)
  9. 用.NET解索尼相机ARW格式照片
  10. vs如何写多线程_java中的多线程的示例
  11. Nat. Commun.|北京大学吴华君,基因组3D结构调控胚胎干细胞分化
  12. C语言 简单的在线电子词典
  13. Java中自定义比较器
  14. vue 上传图像 php处理,通过 Laravel + Vue 实现文件上传功能
  15. 如何用PPT画出好看的科研图
  16. 巴厘岛7天6晚实用型游记
  17. 语音转文字怎么转?三个方法让你学会怎么语音转文字
  18. Unity程序框架总结归置系列(2)——对象池
  19. zzlibsvm / liblinear中的交叉训练技巧
  20. Windows远程桌面连接报错【无法连接到远程计算机】

热门文章

  1. c# 18位身份证源代码
  2. C 语言编程 — 程序的编译流程
  3. OpenStack Nova 高性能虚拟机之 NUMA 架构亲和
  4. 红帽虚拟化RHEV-安装RHEV-M
  5. altium designer 去掉原理图右下角的标签栏
  6. 如何让自己的简历在万人从中一眼就能被HR选中
  7. PHP多种序列化/反序列化的方法(serialize和unserialize函数)
  8. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结...
  9. 苹果回应中情局攻击事件:许多漏洞已经得到解决
  10. 购物车的实现(jsp的session+Java的Map的结合)