REST是更好的Web服务方法还是SOAP?或者它们是针对不同问题的不同工具?或者这是一个微妙的问题——也就是说,一个人在某些领域比另一个人稍微好一点,等等?
我尤其希望了解这些概念以及它们与php世界以及现代高端网络应用程序的关系。
REST是更好的Web服务方法还是SOAP?或者它们是针对不同问题的不同工具?或者这是一个微妙的问题——也就是说,一个人在某些领域比另一个人稍微好一点,等等?
我尤其希望了解这些概念以及它们与php世界以及现代高端网络应用程序的关系。
当前回答
一个快速点传输协议和编制;
出于速度、可靠性和安全性的考虑,我在TCP上使用SOAP,包括编排的机器对机器服务(ESB)和外部服务。更改服务定义,业务流程会从WSDL更改中引发一个错误,并且它会立即显现出来,并且可以重新构建/部署。
不确定你可以用REST做同样的事情-我等待被纠正或课程! 使用REST,更改服务定义—在返回400(或其他值)之前,没有人知道它。
其他回答
我的一般规则是,如果你想要一个浏览器web客户端直接连接到一个服务,那么你可能应该使用REST。如果希望在后端服务之间传递结构化数据,则使用SOAP。
SOAP的设置有时真的很痛苦,对于简单的web客户端和服务器数据交换来说,它通常是多余的。不幸的是,我所见过(并从中学到)的大多数简单编程示例都在某种程度上强化了这种看法。
That said, SOAP really shines when you start combining multiple SOAP services together as part of a larger process driven by a data workflow (think enterprise software). This is something that many of the SOAP programming examples fail to convey because a simple SOAP operation to do something, like fetch the price of a stock, is generally overcomplicated for what it does by itself unless it is presented in the context of providing a machine readable API detailing specific functions with set data formats for inputs and outputs that is, in turn, scripted by a larger process.
在某种程度上,这是可悲的,因为它确实给SOAP带来了坏名声,因为如果不在最终产品如何使用的完整上下文中展示它,就很难展示SOAP的优点。
REST是Roy Fielding发明的一种架构,并在他的论文《架构风格和基于网络的软件架构设计》中进行了描述。Roy也是HTTP协议的主要作者,该协议定义了在万维网上的文档传输。HTTP是RESTful协议。当开发人员谈论“使用REST Web服务”时,可能更准确的说法是“使用HTTP”。
SOAP是一种基于xml的协议,它在HTTP请求/响应中进行隧道传输,因此即使您使用SOAP,您也在使用REST。关于SOAP是否为基本HTTP添加了任何重要的功能存在一些争论。
在创建Web服务之前,我建议学习HTTP。很可能您的需求可以使用规范中已经定义的功能实现,因此不需要其他协议。
我也看到了,我想, 它们是针对不同问题的不同工具。
简单对象访问协议(SOAP)标准,一种定义消息体系结构和消息格式的XML语言,被Web服务使用,它包含对操作的描述。WSDL是一种基于xml的语言,用于描述Web服务以及如何访问它们。将运行在SMTP,HTTP,FTP等。需要中间件支持,定义良好的机制来定义服务,如WSDL+XSD, WS-Policy SOAP将返回基于XML的数据,SOAP为安全性和可靠性提供标准
具象状态传输(RESTful) web服务。它们是第二代Web服务。基于rest的web服务通过HTTP而不是基于soap的服务进行通信,并且不需要XML消息或WSDL服务api定义。对于REST,不需要中间件,只需要HTTP支持。WADL标准,REST可以返回XML,纯文本,JSON, HTML等
对于许多类型的客户端来说,使用基于rest的web服务更容易,同时使服务器端能够演进和扩展。客户端可以选择使用服务的部分或全部方面,并将其与其他基于web的服务混合。
REST使用标准HTTP,因此创建客户端和开发api更简单 REST允许许多不同的数据格式,如XML、纯文本、JSON、HTML,而SOAP只允许XML。 REST具有更好的性能和可伸缩性。 休息并且可以缓存,而SOAP不能 内置错误处理,SOAP没有错误处理 REST在PDA和其他移动设备上特别有用。
REST是一种容易与现有网站集成的服务。
SOAP有一组协议,其中提供了安全性和可靠性标准,并与其他符合WS的客户机和服务器进行互操作。 SOAP Web服务(如JAX-WS)在处理异步处理和调用方面很有用。
对于复杂的API, SOAP会更有用。
我也在关注同样的问题。在我看来,REST实际上是快速和简单的,适用于轻量级调用和响应,并且非常适合调试(还有什么比将URL注入浏览器并查看响应更好的呢)。
然而,REST的不足之处在于它不是一个标准(尽管它由标准组成)。大多数编程库都有一种检查WSDL以自动生成消费基于SOAP的服务所需的客户端代码的方法。到目前为止,使用基于REST的web服务似乎是一种更特别的方法,即编写接口来匹配可能的调用。手动发起http请求,然后解析响应。这本身就是危险的。
SOAP的美妙之处在于,一旦WSDL被发布,那么业务就可以构造它们的逻辑主干,从而设置契约,对接口的任何更改都会改变WSDL。没有任何回旋的余地。您可以根据该WSDL验证所有请求。然而,由于WSDL没有正确地描述REST服务,因此您没有定义的方式来就通信的接口达成一致。
从商业的角度来看,这似乎让沟通变得容易解释和改变,这似乎是个坏主意。
这个线程中最上面的“答案”似乎说SOAP代表简单面向对象访问协议,然而在wiki中,O意味着对象不是面向对象的。它们是不同的东西。
我知道这篇文章很老了,但我认为我应该用我自己的发现来回应。
这是微妙的。
如果您需要让其他系统与您的服务进行接口,那么由于您使用契约、WSDL和SOAP标准所拥有的“验证”层,许多客户端将更乐于使用SOAP。
对于日常系统对系统的调用,我认为SOAP是很多不必要的开销,而简单的HTML调用就可以了。