2019独角兽企业重金招聘Python工程师标准>>>

如今,Web开发者的可选技术相当之多;从简化的数据库访问技术,到易用的中间件服务包装技术,以及各种有趣的客户端软件等等,一应俱全。所有这些产品和工具,都是为了帮助Web开发者用最快的速度开发出最好的Web应用。

然而,拥有大量可选软件方案以及为Web应用的特定部分选用特定方案,都是具有挑战的事;而且,现在Web开发者必须持续跟踪各种不断变化着的标准与方法。

举个例子,Web服务技术就有SOAP(Simple Object Access Protocol,简单对象访问协议)和REST(Representational State Transfer,表示性状态转移)这两种方案。它们都是有效的方案,但在具体场合下采用哪种方案好,这要取决于Web开发者。

目前,大部分Web开发者似乎都了解REST——一种采用标准URI进行调用的方案。REST很容易理解,而且只要是支持HTTP/HTTPS的客户端/服务器就支持它。你可以用HTTP GET方法来执行命令。所以,开发者们感受到的REST的优势是:开发简单、只需依托现有Web基础设施、以及学习成本低。

然而,SOAP作为一种古老的Web服务技术,短期内还不会退出历史舞台。而且,随着SOAP 1.2的出现,SOAP印象中的一些缺点已得到改进,采纳率和易用程度也都得到提高。另需注意的是,从W3C SOAP 1.2版开始,SOAP这一缩写不再代表Simple Object Access Protocol(简单对象访问协议),而是仅仅作为协议名称而已。

相对REST而言,SOAP 1.2多出一些开销,不过这些开销也带来了一些好处。首先,SOAP在三个方面离不开XML(Extensible Markup Language,可扩展标记语言):SOAP信封(envelope)是基于XML的,它定义了消息里有什么以及如何处理它;一套用于数据类型的编码规则;过程调用和响应的规划。SOAP信封由传输协议(HTTP/HTTPS)发出,RPC(Remote Procedure Call,远程过程调用)得到执行,然后一个XML文档随SOAP信封返回。

需要注意的是,基于“通用”传输协议是SOAP的一个优点。REST目前基于HTTP/HTTPS;而SOAP可支持任何传输协议,从HTTP/HTTPS到SMTP(Simple Mail Transfer Protocol,简单邮件传送协议),甚至JMS(Java Messaging Service,Java消息传递服务)。不过,由于XML较为冗长且解析费时,因此采用XML也成为一个弊端。

不过,对Web开发者来说的好消息是,目前上述两种方案都是行之有效的方案。REST和SOAP都能解决许多Web方面的问题与挑战,而且在许多情况下,它们各自都能满足开发者的要求,也就是说可互换使用。

但很多人不知道,这两种技术可以混合搭配使用。REST很好理解,且极易上手;不过由于它缺乏标准,因此只被看作是一种架构方法。与之相比,SOAP是一个工业标准,它具备良好定义的协议,以及一套良好确立的规则,在大型和小型系统中均有采用。

因此,REST的适用场合包括:

  • 有限的带宽和资源 别忘了返回的结构可以采用(由开发者定义的)任何格式。另外,由于REST采用标准的GETPUTPOSTDELETE动词,因此可被任何浏览器所支持。除此以外,REST还可以使用为目前大多数浏览器支持的XMLHttpRequest对象,这为AJAX增色不少。
  • 完全无状态的操作 对于那些需多步执行的操作,REST并非最佳选择,采用SOAP更合适。但是,如果你需要无状态的CRUD(Create/Read/Update/Delete,创建/读取/更新/删除)操作,那么应采用REST。
  • 缓存考虑 若要利用无状态操作的特性,使得信息可被缓存,那么REST是很好的选择。

以上已经覆盖很多方案了,那么,为什么还要考虑SOAP呢?正如前述,SOAP比较成熟而且是经过良好定义的,具有完整的规范。而REST只不过是一种方法,对开发未作任何规约;因此,假如你遇到以下场合,那么SOAP是最佳选择:

  • 异步处理与调用 如果你的应用需要确保可靠性与安全性,那么请采用SOAP。SOAP 1.2为确保这种操作补充定义了WSRM(WS-Reliable Messaging)等标准。
  • 形式化契约 若提供者/消费者双方必须就交换格式取得一致,那么采用SOAP更合适。SOAP 1.2为这种交互提供了严格的规范。
  • 有状态的操作 如果应用需要上下文信息与对话状态管理,那么应采用SOAP。SOAP 1.2为此补充定义了WS-Security、WS-Transactions和WS-Coordination等标准。相比之下,REST方法要求开发者自己来实现这些框架性工作。

正如你所看到的,REST和SOAP各自有其用武之地。它们在安全性和传输层等方面有着自己的潜在问题,不过它们都能完成任务,而且在许多情况下,它们都丰富了Web的技术手段。因此,就这一论题,其实最好的原则就是灵活性原则;因为至少在现今的Web开发中,无论面对何种问题,Web开发者们总有办法运用好这两种技术中的一种。

转载于:https://my.oschina.net/longhtml/blog/156067

REST和SOAP:谁更好,或者都好?相关推荐

  1. 天谕手游会长大人与司空望月,谁的人气更高?都是NPC,别比了

    其实在游戏当中我们必须要看到一个事实,那就是游戏当中很多角色他们的颜值高,而且受关注程度也很高,甚至有很多玩家愿意为这些NPC刷礼物,让他们成为大家关注的存在,更有甚者他们能登到游戏日榜第一,当然这都 ...

  2. 湖南大学与四川大学计算机,四川大学和湖南大学哪个更好一点?都是高校吗?...

    四川大学和湖南大学哪个更好一点?都是高校吗?首先小编可以回答的一个问题就是这两所学校都是工程大学,所以都算是真正意义上的重点大学.但是要真正比较的话,四川大学在学科建设和学校建设上可以比湖南大学要好很 ...

  3. 南京邮电大学通信与计算机哪个好,南京邮电大学和深圳大学哪一个更好呢?都有哪些好的专业?...

    南京邮电大学和深圳大学哪一个更好呢?都有哪些好的专业呢?一般情况下差不多的学校总是会让很多孩子们有选择困难症,不知道怎么样选择才是对的,就拿上面这两所大学来说,都是非常不错的学校,不管是谁能考进去也并 ...

  4. SOAP和HTTP 两种基本传输协议

    1.SOAP:Simple Object Access Protocol ^{Symbolic Optimal Assembly Program}. 2.1.HTTP-GET  2.2.HTTP-PO ...

  5. soap协议_Go和SOAP

    在REST和RPC大行其道的今天,支持SOAP(简答对象访问协议)作为Web服务消息交换协议的情况是越来越少了.但在一些遗留系统中,尤其是采用微软技术栈的服务系统中,SOAP依然占有一席之地,比如在一 ...

  6. mockwebserver java_在Java中使用WireMock和SOAP Web服务

    我是WireMock的创造者. 我最近使用WireMock在客户端项目上模拟了SOAP接口的集合,所以我可以证明它是可能的.至于它是否比SOAP UI更好或更差,我会说有一些明确的好处,但有一些权衡. ...

  7. WebService:跟孔浩学习(契约优先、Schema、WSDL、SOAP、用户管理小系统)

    异构平台之间的交互 XML (DTDàSchema->Stax(XStream).SAX.Dom4J.PULL)    JAXB XStream和Jackson完成Json和java的转化 SO ...

  8. SOAP Version 1.2

    SOAP Version 1.2 W3C Working Draft 9 July 2001 英文版:   http://www.w3.org/TR/2001/WD-soap12-20010709/ ...

  9. SOA Psummarize SOAP概述

    在电影fight  club("战争俱乐部")中,brad  pitt和edward  norton是一对密友??心理上对立的两个极端??两个小伙子尝试互相  通信,但十分艰难.令 ...

  10. SOAP summarize SOAP概述

    SOA Psummarize SOAP概述 作者:Tom  Clements;  2002年1月(2001年8月初次发表) 在电影fight  club("战争俱乐部")中,bra ...

最新文章

  1. 话AI、学实践、探未来,亚马逊云科技AI在线大会报名开启!
  2. TCP/IP详解--第八章
  3. postman进阶之Newman,从安装到使用到填坑,不废话
  4. asp.net 返回上一页的实现方法小集
  5. Fast Matrix Operations
  6. mxnet系列教程之1-第一个例子
  7. 问题解决:使用angularjs、ionic框架如何实现返回上一页并刷新
  8. 数学江湖中的“独孤九剑”
  9. OCP-052考试题库汇总(59)-CUUG内部解答版
  10. Redis与Java - 实践
  11. Python如何创建装饰器时保留函数元信息
  12. 何小鹏发文力挺李斌:2019年最惨的人
  13. D3.js系列——布局:饼状图和力导向图
  14. 超市管理系统软件测试用例图,超市管理系统用户管理模块测试用例集.doc
  15. Spring boot 与 Spring MVC
  16. oracle dataaccess component,【Delphi】运用Oracle Data Access Component(ODAC)组件
  17. html的lang属性
  18. Skywalking概述
  19. 关于 熬夜的惩罚 一题的思路+代码(几何)
  20. vscode自动保存代码,自动按照eslint和standard规范格式化代码设置

热门文章

  1. SpringBoot连接Redis超简单
  2. java -TCP通信
  3. 语句include和require的区别是什么?
  4. Android简化xml sax解析
  5. (寒假CF)Choosing Symbol Pairs
  6. python-socket
  7. 自动化测试学习之路--java String、StringBuilder
  8. 2016个人阅读计划
  9. C# 版本设计模式(Design Pattern)---------------总序
  10. 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭