REST是更好的Web服务方法还是SOAP?或者它们是针对不同问题的不同工具?或者这是一个微妙的问题——也就是说,一个人在某些领域比另一个人稍微好一点,等等?

我尤其希望了解这些概念以及它们与php世界以及现代高端网络应用程序的关系。


当前回答

我认为两者都有自己的位置。在我看来:

SOAP:传统/关键系统和web/web服务系统之间集成的更好选择,在基础层,其中WS-*是有意义的(安全,策略等)。

RESTful:一个更好的网站集成的选择,公共API,在层的顶部(VIEW,即javascript调用uri)。

其他回答

REST是Roy Fielding发明的一种架构,并在他的论文《架构风格和基于网络的软件架构设计》中进行了描述。Roy也是HTTP协议的主要作者,该协议定义了在万维网上的文档传输。HTTP是RESTful协议。当开发人员谈论“使用REST Web服务”时,可能更准确的说法是“使用HTTP”。

SOAP是一种基于xml的协议,它在HTTP请求/响应中进行隧道传输,因此即使您使用SOAP,您也在使用REST。关于SOAP是否为基本HTTP添加了任何重要的功能存在一些争论。

在创建Web服务之前,我建议学习HTTP。很可能您的需求可以使用规范中已经定义的功能实现,因此不需要其他协议。

SOAP体现了Web服务的面向服务的方法——在这种方法中,方法(或动词)是与服务交互的主要方式。REST采用面向资源的方法,其中对象(或名词)占据中心位置。

当我在惠普工作时,我根据开发中的原始规范构建了第一批SOAP服务器之一,包括代码生成和WSDL生成。我不建议在任何事情上使用SOAP。

首字母缩写“SOAP”是一个谎言。它不是简单的,它不是面向对象的,它没有定义访问规则。可以说,它是一项议定书。这是Don Box有史以来最糟糕的规格,这是一个相当了不起的壮举,因为他是“COM”的创造者。

SOAP中没有什么有用的东西是REST不能用于传输的,JSON、XML甚至纯文本不能用于数据表示的。为了传输安全,可以使用https协议。对于认证,使用基本认证。对于会话,有cookie。REST版本将更简单、更清晰、运行更快、使用更少的带宽。

XML-RPC清楚地定义了请求、响应和错误协议,并且对于大多数语言都有很好的库。但是,对于许多任务来说,XML比您所需要的要重。

我也在关注同样的问题。在我看来,REST实际上是快速和简单的,适用于轻量级调用和响应,并且非常适合调试(还有什么比将URL注入浏览器并查看响应更好的呢)。

然而,REST的不足之处在于它不是一个标准(尽管它由标准组成)。大多数编程库都有一种检查WSDL以自动生成消费基于SOAP的服务所需的客户端代码的方法。到目前为止,使用基于REST的web服务似乎是一种更特别的方法,即编写接口来匹配可能的调用。手动发起http请求,然后解析响应。这本身就是危险的。

SOAP的美妙之处在于,一旦WSDL被发布,那么业务就可以构造它们的逻辑主干,从而设置契约,对接口的任何更改都会改变WSDL。没有任何回旋的余地。您可以根据该WSDL验证所有请求。然而,由于WSDL没有正确地描述REST服务,因此您没有定义的方式来就通信的接口达成一致。

从商业的角度来看,这似乎让沟通变得容易解释和改变,这似乎是个坏主意。

这个线程中最上面的“答案”似乎说SOAP代表简单面向对象访问协议,然而在wiki中,O意味着对象不是面向对象的。它们是不同的东西。

我知道这篇文章很老了,但我认为我应该用我自己的发现来回应。

不要忽视XML-RPC。如果您只是追求一个轻量级的解决方案,那么对于一个可以在几页文本中定义并在最少的代码中实现的协议来说,有很多事情要做。XML-RPC已经存在了多年,但已经过时了一段时间——但是极简主义的吸引力似乎使它在最近得到了某种复兴。