我即将在REST中实现一个Web服务 我在洲际连接中存在一个很大的问题,有时会因数据包丢失而变得缓慢且不稳定。
我控制着双方,客户和服务器。 每秒执行多次调用服务器的客户端。有时它只会向一个连接发送更多数据来处理这个互联网问题 我已经阅读了很多关于REST和SOAP差异的内容,我知道SOAP信封比REST数据更大。
我的问题是,由于两者都是http,除了数据大小之外,两者之间是否存在差异? 你会用什么?
答案 0 :(得分:2)
正如您所暗示的,这不是SOAP与REST的关系,而是消息大小和消息频率的问题。
如果协议(消息的数量和频率和模式)对于REST和SOAP是相同的,那么唯一真正的区别是消息大小。但是,真正的RESTful系统设计可能不具有与SOAP版本相同的通信模式,因为REST涉及对资源的操作,而不是对端点上的方法的消息。 REST使用一组统一的标准动词(PUT,POST,GET,DELETE),与SOAP完全不同。如果不了解更多有关您的设计的话,很难说更多。
“正确”的解决方案取决于您是否重视延迟(关注单个消息)或吞吐量。如果你希望每次调用成功的概率更高(即你重视延迟),那么如果它导致更少的数据包就越小越好 - 但如果SOAP消息也相对较小,情况可能并非如此。对于吞吐量,无论SOAP与REST如何,将消息批处理在一起可能会更好。
this question的答案也可能有用。
最后,请注意REST是一种体系结构,而SOAP是一种协议 - REST没有指定您甚至必须使用HTTP,并且它也没有指定有效负载格式。因此,虽然REST实现通常会有较小的消息,但不能保证。
答案 1 :(得分:0)
两者之间的一个区别是,有一个WS-ReliableMessaging标准(由WCF实现),它创建了一个协议,确保您的消息到达,并且它们以正确的顺序到达。如果需要可靠的消息传递(即使在有损网络上),那么这是SOAP over REST的巨大优势。
答案 2 :(得分:0)
SOAP接口可以是RESTful的,所以我假设您正在考虑SOAP与简约协议(XML或JSON,没有enveloppe)。
您指出的主要技术因素是消息的大小。 “自定义”REST使您可以更灵活地按照自己的意愿设计有效负载和标头,而SOAP enveloppe可以为小频繁的消息添加非平凡的大小。
主观上,SOAP库通常会诱使您依赖于状态,会话,非幂等操作或其他非RESTful模式,这些模式在您的情况下是一种负担。你总是可以拒绝诱惑,但这就像试图做无会话的JSF - 它会在代码的每个角落回来。
总的来说,我会选择REST。
也就是说,如果您的消息很大并且必须提供,那么SOAP可能具有优势。我个人喜欢“一次性客户端,服务器和网络”霰弹枪方法,当我能够摆脱它时,它会更好地处理小型无状态幂等和非事务性消息 - 但它使协议设计更加重要。