使用SOAP或REST作为新的Api

时间:2012-12-12 14:44:48

标签: php api rest soap

(不是Should i use rest or soap的重复。这个问题只有一个答案,除了开销之外没有提供很多参数。)

在将此问题标记为重复之前,请考虑我正在寻找在我之前作出选择的人的答案,并根据他们自己的经验解释他们的理由。简单地说“开销”或“更复杂”的答案不符合该档案。

现在提出问题:

前段时间我开始使用Soap(PHP / Zend_Soap_Server,Zend_Soap_Autodiscover)设置新的api。虽然我已经想出如何使用肥皂,但复杂性让我想知道这是否是未来维护的好选择。

我听说过REST,但没有任何使用经验。

所以问题是:REST与SOAP的优缺点是什么?在创建一个全新的api(相当复杂的api,几个方法,使用ssl,必须具有良好的安全性等)时,你有什么建议,REST或SOAP。

如果您认为您的答案在REST和SOAP之间取得平衡,并且特定的依赖项或功能会缩小规模,请务必询问您需要知道的任何内容。我会尽快回答。

api功能的简短列表:

  • 验证
  • 为前端执行数学函数
  • 提供二进制文件到前端(发票)
  • 各种信息的基本CRUD

api的位置基本如下:

互联网 - >网站 - > [内部网络] - > API /后端 - >数据库

感谢您提前抽出时间..

1 个答案:

答案 0 :(得分:28)

这当然是一个非常有争议的话题,但与此同时,出于多种原因,大多数新服务都是REST。我不会介绍两者之间的差异(因为有详细记录),但更多我认为你今天(2012年)使用REST构建新服务的原因:

  • REST更简单,基本上只是建立在HTTP
  • 之上
  • 您可以使用Web浏览器或curl或httpie等测试(和调试)REST服务。是的,这在技术上也可以使用SOAP,但您必须在某种程度上理解SOAP模式。
  • 同样,只要您有办法访问HTTP,就可以构建REST客户端。 SOAP需要一个支持SOAP的库
  • REST更像是一种风格,建立在HTTP之上,而SOAP是一种基于HTTP的整个协议(也是一种协议)
  • SOAP结束了疯狂的扩展协议,如WS-Security,WS-Encryption(基本上,这是非常复杂的委员会设计解决方案,解决了几十年前互联网为HTTP解决的问题)

如果你浏览一下互联网上的一些主要API(例如Google,Facebook,Twitter等),你会发现很多REST,而且几乎没有SOAP。那些拥有SOAP接口的人正在弃用或完全放弃它们,因为没有理由再坚持使用它了。

事实上,许多大型服务更进一步,只提供带有JSON格式的REST服务,而不是XML或两者兼而有之,因为像REST over SOAP一样,JSON在大小方面具有很多优势。简单的XML,继续支持XML没有多大意义。


与SOAP相比,REST几乎没有任何缺点。

关于我能想到的唯一实际考虑因素是从客户的角度来看。使用SOAP(因为WSDL,假设您生成一个),您可以在服务(例如VisualStudio)上指向支持SOAP的IDE,它将基于远程服务生成本机客户端代理API。这在快速启动和运行方面有点不错,但有一些缺点:它会强制您使用服务中定义的对象(而使用REST,只要数据映射,您就可以使用自己的对象定义in),并且取决于远程服务如何处理版本控制(或不使用)以及如何使用它,您可能最终必须更新应用程序的主要部分,因为它有一些简单的命名更改。

从服务器的角度来看,我真的看不到选择SOAP over REST的任何技术优势。

TL; DR:SOAP不一定,只是REST更好。