SOAP与REST,何时使用一个而不是另一个?

Sho*_*gun 9 rest soap

每次我遇到这个问题时我都很困惑,有什么特性可以帮助你选择SOAP over REST或者其他方式?

我的意思是,除了REST与SOAP相比具有紧凑的格式以及其他"次要"或"技术"差异这一事实之外,哪些"明显的"差异使得其中一个更适合项目而不是另一个?

仅仅为了记录,我已经阅读了有关Stack Overflow上此问题的所有其他问题(1 | 2 | 3 | 4),并且其中没有一个回答了我的问题.

Don*_*ows 11

REST和SOAP之间的区别是基本的,但它们并没有那么不同.最终,您仍需要传输完全相同的信息才能执行特定的抽象操作.通过选择要返回的信息很难使REST变得非常简单,而使用MTOM的SOAP可以有效地传输大型二进制块.甚至可以使用非XML编码和连接传输(例如,XMPP)与SOAP,使其比REST 有效.

所以不要担心!

需要考虑的一个更相关的事情是SOAP在某些语言中继续拥有更高级的工具支持,而其他语言则更喜欢REST.例如,如果您想要一个Java客户端用于您的服务,您将能够在几分钟内使用SOAP:只需通过工具引擎放置WSDL位置,您就拥有了一个基本客户端.另一方面,如果您正在使用Javascript客户端,那么您绝对更愿意处理REST接口; JavaScript的作品伟大与REST.

这里要注意的一个关键事项是,您可以同时支持SOAP和REST服务(您可能需要将它们放在不同的端点上,但这并不是非常繁琐).我使用我支持的服务(使用Java和Apache CXF)执行此操作,并且两者的开销很小:关键是我需要一个SOAP和REST接口使用的幕后干净的抽象接口.

  • 很好的答案.我认为关键点在于SOAP是结构化的 - 你有WSDL,你确切知道数据是什么样的 - 而REST通常是自由格式的(尽管它[不一定]是](https:/ /developers.helloreverb.com/swagger/)). (4认同)
  • @Dagg在REST的不同方法之间似乎存在很多争论; 有些人想要很大的灵活性,有些人则想要可预测性.我想这实际上取决于你对第三方客户的态度:"他们必须适应我"与"我需要支持他们".SOAP/WSDL往往更倾向于"我支持它们".我更愿意为我的服务发布合同; 他们往往在语义上足够复杂,以至于客户需要了解他们所做的事情...... (4认同)
  • 我也认为这部分是文化的.我认为,SOAP服务的严格定义性质更适合于强类型语言,您需要设置具有适当属性的类以及将响应转换为的内容.在弱类型语言中,说"这是一个对象而且它有一些属性"并不是一个问题,你不需要确切地知道它是什么样的. (2认同)