Web services 休息vs.肥皂。休息有更好的表现吗?

Web services 休息vs.肥皂。休息有更好的表现吗?,web-services,performance,rest,soap,Web Services,Performance,Rest,Soap,我读了一些关于Soap和Rest的问题 我没有找到我想要的答案。 我们有一个使用soapweb服务构建的系统。 该系统的性能不是很好,正在讨论中 将所有Soap web服务替换为REST web服务。 有人认为休息有更好的表现。 我不知道这是不是真的。(这是我的第一个问题) 假设这是真的,那么使用 休息代替肥皂?(我们失去了什么吗?) 提前感谢。对于SOAP和REST,我肯定不是专家,但我所知道的唯一性能差异是SOAP在发送/接收数据包时有很多开销,因为它是基于XML的,需要SOAP头等等。RE

我读了一些关于Soap和Rest的问题 我没有找到我想要的答案。 我们有一个使用soapweb服务构建的系统。 该系统的性能不是很好,正在讨论中 将所有Soap web服务替换为REST web服务。 有人认为休息有更好的表现。 我不知道这是不是真的。(这是我的第一个问题) 假设这是真的,那么使用 休息代替肥皂?(我们失去了什么吗?)


提前感谢。

对于SOAP和REST,我肯定不是专家,但我所知道的唯一性能差异是SOAP在发送/接收数据包时有很多开销,因为它是基于XML的,需要SOAP头等等。REST使用URL+querystring发出请求,这样就不会通过网络发送那么多kB的数据


我肯定还有其他ppl,所以谁能给你更好更详细的答案,但至少我试过;)

SOAP需要解析XML消息,并发送和接收所有额外的内容

REST通常使用更简洁、更容易解析的东西,比如JSON

然而,在实践中,差别并没有那么大

< XMLis >建立DOM通常是用C++或java中的XeRCE代码来完成超高速优化的代码,而大多数JSON解析器都是自己的或解释的。
在快速网络环境(LAN或宽带)中,发送一个或两个K与发送10到15 K之间没有太大区别

性能是一个广泛的话题

如果您指的是服务器的负载,那么REST的性能要好一点,因为它在HTTP之上的开销最小。通常SOAP会带来一堆不同的(生成的)处理程序和解析器。无论如何,性能差异本身并没有那么大,但是RESTful服务更容易扩展,因为您没有任何服务器端会话

如果你指的是网络的性能(即带宽),REST的性能要好得多。基本上,它只是HTTP。没有开销。所以,如果您的服务运行在HTTP之上,您就不会比REST更精简了。此外,如果用JSON(与XML相反)编码表示,将节省更多字节

简言之,我会说“是的”,你在休息时会表现得更好。此外,它(在我看来)将使您的界面更容易为您的客户使用。因此,不仅服务器变得更精简,客户端也变得更精简

然而,有两件事要考虑(因为你问‘你会失去什么?’):

RESTful接口往往更“健谈”,因此根据您的域和资源的设计方式,您可能会执行更多的HTTP请求


SOAP具有非常广泛的工具支持。例如,顾问喜欢它,因为他们可以使用工具定义接口并生成wsdl文件,而开发人员喜欢它,因为他们可以使用另一组工具从该wsdl文件生成所有网络代码。此外,XML作为表示具有模式和验证器,在某些情况下这可能是一个关键问题。(JSON和REST确实有类似的东西,但工具支持远远落后)

只是对wuher的答案补充一点

使用Chrome web浏览器请求此页面时的Http头字节:761
文章中示例soap消息所需的字节数:299

我的结论是:不是线路上字节的大小让REST运行良好


简单地将SOAP服务转换为REST不太可能获得任何显著的性能好处。REST的优点是,如果遵循这些约束,那么就可以利用HTTP为生成可伸缩系统提供的机制。缓存和分区是您的工具带中的工具。

您将这个问题表述为REST和SOAP在现有系统中是可以互换的。事实并非如此

当您使用SOAP(一种技术)时,您通常有一个在“方法”中定义的系统,因为实际上您正在处理RPC

当您使用REST(一种体系结构样式,而不是一种技术)时,您创建的系统是根据“资源”定义的,而不是方法定义的。SOAP和REST之间没有1:1映射。系统架构与此有着根本的不同


或者您只是在谈论“通过URI的RPC”,它经常与REST混淆?

这要看情况而定。对于请求数据可能变大的情况,REST并没有(好的)答案。我觉得这一点如果有时在炒作休息时被忽视了

让我们设想一个服务,它允许您请求数千个不同项目的信息数据

SOAP开发人员将定义一个方法,允许您检索一个或任意多个项目的信息。。。在一个电话里

REST开发人员会担心他的URI会变得太长,因此他会定义一个GET方法,该方法将单个项作为参数。然后,为了获取数据,您必须多次调用此函数,每项调用一次。干净易懂。。。但是

在这种情况下,REST服务将需要更多的往返,以完成对SOAP服务的单个调用所能完成的任务

是的,我知道在REST场景中如何处理大型请求数据有一些变通方法。例如,您可以将内容打包到请求的正文中。但是,您必须仔细定义(在服务器端和客户端)如何解释这一点。在这些情况下,你开始感到痛苦,休息不是一种真正的标准(像肥皂),而是一种做事的方式

对于仅交换相对有限的数据量的情况,REST是一个非常好的选择。归根结底,这是大多数用例。

一件事