SOAP的当前意义是什么


51

上一次我在2013年在一家金融公司实习期间遇到了一个基于SOAP的服务。那是我开始从事IT事业的时候。我记得在我的一个工程课程中有一些关于SOAP的学习资料。除此之外,我在职业生涯中没有使用过太多SOAP。

我问这个问题是因为“ SOAP和REST之间的差异”这个问题是我最近的一次采访中出现的。据我所知(以及我在Google上所发现的),SOAP是一种在客户端和服务器之间具有紧密耦合的协议,用于信息交换,该协议与业务逻辑密切相关。REST是用于数据传输的更灵活的无状态架构。

如果我对SOAP和REST之间的区别有误,可以请我纠正我吗?另外,SOAP在当今的意义是什么?人们仍在开发新的基于SOAP的API,还是现在已经成为传统?



2
2016年

14
@gnat:就其价值而言,这两个问题的答案都非常糟糕。
罗伯特·哈维

7
您是否真的看到过REST服务?我所看到的只是“最终了解HTTP动词含义的Web服务”。为什么我们突然调用HTTP REST?
a安

8
@Luaan:没什么突然的事。人们多年来一直在滥用“ REST”一词。
与莫妮卡(Monica)进行的轻度比赛

Answers:


58

REST确实是一种建筑风格。SOAP是一种数据协议。区别很重要;您不能直接比较它们。

REST的主要目的是代表Internet上的资源提供发现资源机制。 相反,SOAP用于在计算机之间通信结构化数据,而这正是它的全部作用。

请注意,您实际上并不需要REST在Internet上的两台计算机之间创建客户端/服务器关系。您所需要的只是一种传输JSON或XML的机制,如果您愿意与其他所有人不兼容,甚至不需要。

尽管如此,SOAP对于新的面向公众的API仍然不受欢迎,尽管它仍然可以用于B2B应用程序,因为您可以使用它定义“数据契约”。JSON Web服务具有相当轻巧和灵活的优点,并且由于Javascript可以本地识别JSON,因此它是浏览器的自然选择。

但是,实际上,这与REST无关。

进一步阅读
REST是否比SOAP更好?(很好的文章,即使它错误地将REST称为协议)。
理查森成熟度模型


3
我要说的是,JSON Web服务的杀手级功能就是这样一个事实,即浏览器对XML和SOAP的支持很差,而对JSON的支持则几乎没有。SOAP可以做很多事情,但是如果您无法针对SOAP服务发出AJAX请求,那它就死定了。的JavaScript / JSON成为互联网的最小公分母,所以你需要一个巨大的好处不使用它,而SOAP是不是要好得多。
a安

3
@Luaan我不会说浏览器对XML的支持很差。实际上,很难做到比做XML HttpRequest并访问具有已解析DOM的属性要好。只是,如果您想要的是典型的数据结构而不是文档,则无论您是在浏览器中还是在任何其他环境中,JSON都更适合。
安德烈Paramés

4
您所需要的只是一种传输JSON或XML的机制,如果您愿意与其他所有人不兼容,甚至不需要。-1:如果要连接客户端和服务器,则只需要一个任意协议,双方都知道使用xml,JSON或与其他任何人兼容都没有关系。即使使用json或xml也不保证您与所有人甚至某人兼容。Json和xml只是数据格式而已。
Paul Wasilewski

6
@PaulWasilewski:是的,我就是这么说的。 不要挂断电话。每个人都使用JSON是有原因的;这是一个标准。 使用它可以保证您使用的是其他人可以识别的东西。
罗伯特·哈维

3
@RobertHarvey,不,这不是您写的,也许是您的意思。JSON是标准的,那又如何呢?CSV,Protcol缓冲区,BSON以及许多其他标准均已标准化。因此,每个人都使用JSON的原因是多种多样的。而且甚至有些人正在使用JSON,因为每个人都在使用JSON;)
Paul Wasilewski 2016年

29

REST比SOAP的局限性要强得多,这是SOAP的强项和流行的原因。

在SOAP中,允许的操作集和允许的数据类型集本质上是无限的。SOAP是一种远程过程协议,您可以使用它在网络上公开本地API,而不会失去任何保真度。这使SOAP在企业环境中变得很流行,在企业环境中,复杂的事务系统需要在网络上进行交互,而同时又不会失去任何保真度。这种丰富的功能也是SOAP的劣势,因为它使SOAP API难以理解和使用,以至于需要采用WSDL和SOAP客户端库形式的自动化工具来使事情变得有意义。更重要的是,在面向公众的API中,暴露底层系统的全部丰富性并没有吸引力,在公共API中,您希望提供抽象,以使您可以发展底层系统而不必破坏或版本化API。

REST + JSON因其简单性而广受欢迎。它定义了一组有限的操作和一组有限的数据类型,要求API设计人员仔细设计适合该有限词汇表的抽象,并通过将业务域映射到REST资源进行真正的思考。REST API易于理解且易于使用,无需任何特殊工具。对于您的API用户可能具有各种技能和知识的面向公众的API,这正是您想要的,这就是为什么您在网络上看到的所有API都已过渡到REST的原因。SOAP被降级为仍然需要并且需要在系统之间共享复杂API的企业环境。然而,

本质上,人们已经意识到,为使API足够简单和抽象以使其易于维护和易于使用,必须对API设计应用的一组约束正是REST引入的一组约束,这有效地抵消了SOAP的约束。好处只给您带来缺点。您可以使用SOAP构建简化的API,但是它永远不会像REST那样容易使用,因此实际上每个人都选择REST。


4
是的,古老的静态与动态类型辩论很好,:D整洁,艰难与vs强,简单,这场战争永无止境。
a安

@Luaan ...而动态总是赢得数据交换。youtube.com/watch?v=ROor6_NGIWU
Jared Smith

6
@JaredSmith我非常不同意。应该遵循合同,这样两个端点才能正确映射数据,如果您可以通过元数据发布而不是容易出错的文档页面来做到这一点,那您为什么不呢?
drake7707 '16

1
实用的REST是一个协议;论文和宗教是“建筑风格”。这个答案正确地将实际休息与实际肥皂进行比较。
bmargulies

1
您的答案已经表明您不了解REST,并在注释中强调了这一点。
Paul Wasilewski

5

您无法比较REST和SOAP。REST是一种体系结构样式,而SOAP是一种协议。

不幸的是,REST成为通俗地说是RESTful HTTP服务的同义词,这意味着使用HTTP作为(应用程序)协议实现REST样式的体系结构。

REST基于以下原则(约束和元素)(括在RESTful HTTP中的实现)[1]

  • 无状态(HTTP是无状态协议)
  • 资源(由URI标识)
  • 统一接口(HTTP方法)
  • 表示形式(MIME-TYPE)
  • HATEOS(超链接)
  • 缓存(HTTP缓存)

另一方面,许多人通过说SOAP表示基于WSDL和SOAP的Web服务,这是W3C Web服务体系结构的一部分[2]

  • SOAP用作协议来交换信息(基本上是方法名称,参数,返回值,数据类型等)。
  • WSDL一种描述Web服务的接口定义语言。

SOAP *的当前意义是什么?

SOAP是W3C标准,在W3C Web服务中用作信息交换格式。这些Web服务-尤其是在2008年(+-3年)大肆宣扬SOA(面向服务的体系结构)期间-并且(不幸的是)仍然主要在企业应用程序中实现。

这有几个原因。那时RESTful HTTP并不为人所知,并且被误解了。不幸的是,它仍然被误解了看看其他答案

“ [...] REST比SOAP [...]受到更多的限制。”

“ REST的主要目的是代表Internet [...]上的资源。”

另外,SOAP(和WSDL)是W3C Web服务协议栈的一部分,W3C Web服务协议栈为实现Web Service提供了更多标准。

人们仍在开发新的基于SOAP的API,还是现在已经成为传统?

因此,是的,仍然存在并且将来还会有使用SOAP的系统(至少在企业系统中,大多数是在幕后)。但是现在大多数人都在尝试做某种“ REST”。

如果我对SOAP和REST之间的区别有误,可以请我纠正我吗?

REST是用于数据传输的更灵活的无状态架构,并不是一个很好的解释。简而言之,REST是一种具有特定约束和元素的体系结构样式。SOAP是一种信息交换协议。

就像我已经写过的,您无法比较它们。但是您可以将RESTful HTTP Web服务与SOAP / WSDL Web服务进行比较。


“但是您可以将RESTful HTTP Web服务与SOAP / WSDL Web服务进行比较。” 但这就是OP的要求。有人回答过吗?
RoboJ1M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.