基于RESTful vs基于SOAP的Web服务?

我最近通过web服务手册介绍了基于SOAP的Web服务和REST风格的Web服务。 我不确定我应该选择哪一个参数,因为它们看起来都相似(甚至从开发人员的角度来看)。 这是我的观点

在SOAP Web服务中,我们使用由Web服务生成的WSDL文件,然后基于此创建客户端存根。

我的理解是,内部存根也会使用HTTP协议与远程java webservice进行通信。 对?

这里会有HTTP请求/响应正文中的SOAP消息(XML消息)。 因此在基于REST的Web服务中需要多一层的深层查询,HTTP请求本身就像消息一样。 这里我们有WADL而不是WSDL。 这里我们也可以创建基于WADL的存根。 因此,除了某些技术差异消费者连接到生产者以及处理请求/响应的方式之外,每件事情看起来都差不多。因此根据我的理解,从开发人员角度来看,基于休息和基于SOAP的Web服务没有太大的区别开发人员的工作量几乎相同)。

我的理解是否正确?

可能在幕后,SOAP可能比REST webservices更复杂,因为SOAP中有消息(SOAP消息嵌入在HTTP请求中),但在基于REST的服务中,HTTP请求本身可以作为消息。


SOAP和REST旨在解决一组相同的问题,即以最简单的方式促进异构应用程序之间的交互。 现在是否选择REST或SOAP不仅取决于开发工作量。 你应该考虑以下一些因素,

  • 数据类型,无论它是简单对象(如名称值对)还是非常复杂的模式(或一些二进制数据)在应用程序之间交换。
  • 您的服务的消费者 。 例如,当您开发RIA时,REST更适合。
  • 安全要求 。 SOAP由标准驱动,提供了一个非常好的安全性方面的谷物级调整。 您可以对SOAP xml消息的各个元素进行编码。 这些类型的东西在REST中是不可能的(目前为止)。
  • 现在,像JSON这样的符号在轻量级数据交换中非常流行,许多REST服务框架非常容易提供此功能。
  • 从技术上讲,您不需要任何框架等来创建REST Web服务。 据我所知,WADL等最近引入了标准化元素,但REST甚至在WADL出现之前就已存在。 REST并不是什么新鲜事物,它是网络工作的方式 。 REST框架使其非常简单。
  • SOAP是由标准驱动的,因此当你使用它们时有更多的限制条件。 所以,如果你使用的情况很简单(这非常主观),那么去REST。


    这是开发Web服务的两种不同方式......并且有很多关于它们的差异(和优点)的讨论。

    SOAP Web服务远不止您提到的要点,实际上有一个完整的“堆栈”(WS- *),旨在标准化设计和实现此类Web服务的方法。 这对一些系统来说很好,但对其他系统来说“太多”并且很重。 在幕后HTTP是“传输”消息的一种流行方式,但它不是唯一的方式,它们可以通过其他协议来实现。 在SOAP中,您很大程度上依赖于“WSDL”规范,该规范确实可用于“生成”服务器和客户端代码。 在这些规范中,您非常关注“操作”,即要在Web服务上完成的事情。

    另一方面,在REST中,我们更多地考虑“资源”(由给定的URI描述),然后在其上执行HTTP操作。 虽然WADL存在,但SOAP Web服务中没有太多的规范概念。 实际上,一个很大的区别,以及哪些人不太了解(但实际上是REST原则的核心部分),REST中有一个所谓的“超链接”,旨在允许客户端 - 服务器进行通信“状态”(下一步要去哪里),这在SOAP Web服务中不是“动态”处理的。

    底线,对于开发人员来说:SOAP确实有很多好的工具(例如:所有的Eclipse Web服务工具),但是它往往有点繁琐和很多“代码”。 REST开发通常更清洁和更简单。 我确实认为这两种解决方案都是作为你正在处理的情况的功能使用的,你不应该“挑选一个”。 例如,如果您拥有庞大的企业应用程序,有很多部件和相互依赖性,事务处理等,可能还需要WSDL(合同)的SOAP Web服务。 另一方面,如果您将一个Web服务(或API)暴露给客户端,而没有很多相互依赖关系,则可能REST是最有趣的(您可以在过去5年左右的变化中看到这一点,所有主要Web APIS - 谷歌,微博等,现在都作为REST Web服务公开)。


    没有太大的区别(特别是从开发人员的角度来看)。

    唯一真正的区别是SOAP是用WS- *建议标准化的。 同样在SOAP中,可以创建事务并根据标准保护消息本身。 因此,为了互操作性,SOAP在此基础上具有优势。

    链接地址: http://www.djcxy.com/p/71389.html

    上一篇: RESTful vs SOAP based webservices?

    下一篇: WSDL for REST WCF