休息与肥皂。 REST有更好的性能吗?
我阅读了一些已发布的关于Soap和其他的问题 ,我没有找到我正在寻找的答案。 我们有一个使用Soap Web服务构建的系统。 该系统性能不是很好,正在讨论 以取代所有Soap Web服务以获得REST Web服务。有人认为休息有更好的表现。 我不知道这是否属实。 (这是我的第一个问题) 假设这是真的,使用 REST代替Soap是否有缺点? (我们是否失去了什么?)休息与肥皂。 REST有更好的性能吗?
在此先感谢。
表现是一个广泛的话题。
如果您的意思是服务器的负载,REST会有更好的性能,因为它在HTTP上承受的开销最小。通常SOAP会带来一堆不同的(生成的)处理程序和解析器。无论如何,性能差异本身并不那么大,但由于您没有任何服务器端会话,RESTful服务更容易扩展。
如果您的意思是网络的性能(即带宽),REST具有更好的性能。基本上,它只是HTTP。没有开销。所以,如果你的服务在HTTP之上运行,你就不会比REST更精简。此外,如果您使用JSON(而不是XML)对表示进行编码,则可以节省更多的字节。
总之,我会说'是',你会更加高效地使用REST。另外,它(在我看来)会让你的界面更容易为你的客户使用。所以,不仅您的服务器变得更精简,而且客户端也变得更加精简
然而,几件事情要考虑(因为你问“你会输呢?”):
的RESTful接口往往是多一点“健谈”,所以要根据您的域名,你如何设计资源,你可能会做更多的HTTP请求。
SOAP具有非常广泛的工具支持。例如,咨询人员喜欢它,因为他们可以使用工具来定义接口并生成wsdl文件,开发人员也喜欢它,因为他们可以使用另一套工具从该wsdl文件生成所有网络代码。而且,作为表示的XML具有模式和验证器,在某些情况下可能是关键问题。 (JSON和REST确实有类似的东西来了,但工具支持远远落后)
我并不相信REST接口更健谈,但除此之外,它是一个可靠的答案。 – 2010-11-12 12:35:20
为了真正回答你需要解决的问题,以解决特定的用例和特定的库实现。这个答案造成了太多的假设,从会议开始,“讨厌”和“对顾客来说更容易”。 – 2014-10-23 07:14:38
RESTful服务可以有服务器端会话。它通常通过cookie或自定义http头来实现。 – Oooogi 2015-12-31 09:45:23
对于SOAP vs REST,我绝对不是专家,但我知道的唯一性能差异是SOAP在发送/接收数据包时有很多开销,因为它基于XML,需要SOAP标头,等等。REST使用URL +查询字符串发出请求,因此不会通过线路发送那么多的kB。
我敢肯定,这里还有其他的脂肪酶对SO谁可以给你更好的和更详细的答案,但至少我尝试;)
SOAP要求被解析的XML消息和所有< riduculouslylongnamespace: mylongtagname> extra </riduculouslylongnamespace:mylongtagname>要发送和接收的内容。
REST通常使用更简洁,更容易解析的东西,比如JSON。
但实际上差异并不大。
通过XML构建DOM通常使用C++或Java中的超快速超优化代码XERCES,而大多数JSON解析器都在您自己的或解释类别中。
在快速网络环境(LAN或宽带)中,发送一个或两个K与10到15 k之间没有太大区别。
Json比XML慢* – MariuszS 2014-10-08 18:47:58
它可以更慢,速度更快,最终它们都是文本格式的数据。 – 2014-10-23 07:17:12
只是添加一点wuher的答案。 761
字节在wikipedia文章为样本SOAP消息需要:299
我的结论:使用Chrome网络浏览器请求该页面时
HTTP头字节,是不是字节的电线上的大小允许REST表现良好。
简单地将SOAP服务转换为REST很可能会获得任何显着的性能优势。 REST的优势在于,如果遵循约束条件,则可以利用HTTP为生成可伸缩系统提供的机制。缓存和分区是您工具带中的工具。
感谢您的回答! – Luixv 2010-11-12 12:37:22
我把我的尼克从绝地变成了怀特(这个答案指的是杰迪的答案,所以这实际上是伍德的答案)。对不起,我从来不应该挑选杰德尼克在第一个地方.. – wuher 2011-03-22 19:30:44
我不认为这是一个公平的比较,开发一个休息为基础的样品,做同样的事情,维基百科上的肥皂示例将小于导线比维基百科的例子。 – stevenrcfox 2011-10-26 11:33:08
您将这个问题形容为REST和SOAP在现有系统中以某种方式互换。他们不是。
当你使用SOAP(一种技术)时,你通常有一个在'methods'中定义的系统,因为实际上你正在处理RPC。
当您使用REST(架构风格,而不是技术)时,您将创建一个系统,该系统根据“资源”定义,而不是在方法中定义。 SOAP和REST之间没有1:1映射。系统架构根本不同。或者你只是在谈论“通过URI的RPC”,它经常与REST混淆?
如果您的应用程序采用松散耦合的方式进行设计,那么Web服务实现将是可以互换的。您的答案是一种无关紧要的话题,您对关于您一无所知的系统的可互换性的假设是错误的。 – BentOnCoding 2011-07-05 21:58:09
我认为这是一个合法的答案。尽管最终需要澄清一个问题,但如果大多数情况下它试图用相关的事实信息来回答这个问题,这并不能作为答案的无效。虽然它没有解决绩效问题本身,但它解决了问题的基本前提的有效性,这与提供问题的完整答案相关。 (无论是对还是错是一个单独的问题,这可以通过投票的赞成票比删除投票来得到更好的解决。) – 2014-05-23 18:13:17
这一切都取决于。对于请求数据可能变大的情况,REST确实没有(好的)答案。我觉得这一点,如果有时被忽视时,吹嘘REST。
让我们想象一个服务,允许您请求数千个不同项目的信息数据。
SOAP开发人员将定义一种方法,该方法将允许您在一次调用中检索一个或多个项目的信息。
REST开发人员会担心他的URI会变得太长,所以他会定义一个GET方法,它会将单个项目作为参数。然后,您必须多次拨打这个电话号码,每个项目一次,以获取您的数据。干净,容易理解......但。
在这种情况下,REST服务需要更多的往返行程才能完成SOAP服务上的单个调用。
是的,我知道有关如何处理REST场景中的大量请求数据的解决方法。例如,您可以将东西包装到您的请求中。但是,你必须仔细定义(在服务器和客户端)如何解释。在这些情况下,你开始感觉到REST不是一个真正的标准(比如SOAP),而更像是一种做事方式。
对于有些情况下只相对有限的数据量被交换REST是一个非常好的选择。在这一天结束时,这是大部分用例。
这是服务设计的问题,与REST架构模式无关。我已经看到SOAP服务同样健谈。您可以设计出不错的基于REST的服务,而无需诉诸冗长而复杂的URL结构。 – 2012-10-22 15:29:19
我想我想说的一点是,在请求很大并且数据结构复杂的情况下,我看不到REST非常优雅。这些场景_do_存在,但无可否认,在大多数情况下,请求中的数据是小而无关紧要的,在这种情况下(我认为这是大多数情况下),与SOAP相比,REST是一个很好的选择。在REST世界中,如果请求_is_大,那么您必须将请求数据嵌入到正文中以避免URL变得过长。然后什么?这对互操作性有好处吗? – peterh 2012-10-30 12:43:31
其他答案似乎忽略的一件事是REST支持缓存和HTTP的其他好处。虽然SOAP使用HTTP,但它不利用HTTP的支持基础设施。 SOAP 1.1绑定仅定义了POST动词的使用。这在1.2引入了GET绑定的情况下得到了修复,但是如果使用旧版本或者没有使用适当的绑定,这可能是一个问题。
安全性是另一个关键性能问题。 REST应用程序通常使用TLS或其他会话层安全机制。 TLS比使用WS Security等应用程序级别的安全机制要快得多(WS Security也受到security flaws的影响)。
但是,我认为在比较基于SOAP和REST的服务时,这些大多是小问题。您可以找到适用于SOAP或REST性能问题的解决方法。我个人认为,无论是SOAP还是REST(REST,我的意思是基于HTTP的REST服务)都不适合需要高吞吐量和低延迟的服务。对于这些类型的服务,您可能想要使用诸如Apache Thrift,0MQ或其他众多二进制RPC协议。
通常,基于REST Web服务是优选的,由于其简单性,性能,可扩展性,以及对多种数据格式的支持。 SOAP在服务需要全面支持安全性和事务可靠性的情况下受到青睐。
答案确实取决于功能和非功能性要求。询问下面列出的问题将有助于您选择。
REF:http://java-success.blogspot.ca/2012/02/java-web-services-interview-questions.html
服务是否公开数据或业务逻辑? (对于公开数据,REST是更好的选择,SOAP WS可能是更好的逻辑选择)。 消费者和服务提供商是否需要正式合同? (SOAP通过WSDL签订正式合同) 我们是否需要支持多种数据格式? 我们是否需要进行AJAX调用? (REST可以使用XMLHttpRequest) 调用是同步的还是异步的? 呼叫有状态还是无状态? (REST适用于无状态CRUD操作) 需要什么级别的安全性? (SOAP WS对安全性有更好的支持) 需要什么级别的事务支持? (SOAP WS对事务管理有更好的支持) 我们的带宽是否有限? (SOAP更详细) 对于为该服务构建客户端的开发人员来说,最好的方法是什么? (REST更容易实现,测试和维护)
您没有做出选择,现代的框架,让您以最小的变化暴露了这些格式的数据。根据您的业务需求和负载测试的具体实现来了解吞吐量,没有正确的答案这个问题没有正确的负载测试的特定系统。
这是http://stackoverflow.com/questions/106546/performance-of-soap-vs-xml-rpc-or-rest/的DUP? – pjz 2012-12-03 18:06:16
你失去的是SOAP的“超工程”:-)方面。加密,消息签名,认证,不推广,自我描述服务等。如果你需要做这些(而大多数服务不需要!)然后去做SOAP。 – 2018-01-09 18:09:11