【问题标题】:Difference between REST and WebServicesREST 和 Web 服务之间的区别
【发布时间】:2010-11-29 09:55:24
【问题描述】:

REST 和 WebService (SOAP) 有什么区别,我查看了 facebook api,它们使用 HTTP 标头和一些参数(可能是 xml 或非)并以 xml 形式返回结果,而 SOAP 的其他功能完全相同,HTTP 标头 + xml参数并返回headers + xml。

REST 还需要一些经过身份验证的令牌,否则 SOAP 使用 http 会话,这与用于身份验证和其他信息的令牌完全相同。我只能看到 SOAP 是 REST 的高级版本吗?

或者还有其他性能方面的考虑吗?阅读有关 REST 的内容只是谈论非常高级的客户端服务器通信,但即使 SOAP 也完全一样。谁能指出我在哪里可以定义正确的 REST 和 SOAP 边界。

我们在 .net 中透明地使用了很多 SOAP,但我只想知道是否真的值得关注 REST,目前一切都运行得非常顺畅。

我知道 REST 是一种架构,而 SOAP 是一种协议,但我的问题是,目前 SOAP 的 ASP.NET WebService 实现是否具有 REST 架构?

【问题讨论】:

  • 这有可能重复 - REST 与 SOAP 似乎是一个常见问题(通过@John Saunders,好点但回滚,因为评论是在编辑中提出的)。虽然主题是重复的,但我认为这个问题会出现在其他人不会的搜索中,所以这个问题应该保持开放。

标签: asp.net web-services rest soap


【解决方案1】:

SOAP 是一种通过 HTTP 作为 XML 发送/接收数据的协议。

一个典型的 WebService 将是几个方法,一个 WSDL 描述了如何调用它。对于这些结构的结构并没有真正的约定,因此您总是需要大量的 API 文档。

通常这将类似于(对于 ASP.NET):

  • HTTP POSTmysite.com/products.asmx/ListAllProducts - 返回产品的 XML 列表
  • HTTP POSTmysite.com/products.asmx/GetProduct - 根据已发布内容中的 SOAP XML 返回产品的 XML
  • HTTP POSTmysite.com/products.asmx/UpdateProduct - 根据发布内容中的 SOAP XML 更改产品

REST 更像是一种用于构建所有方法的约定:

  • 来自 mysite.com/products 的 HTTP GET - 返回列出所有产品的 XML 或 JSON
  • 来自 mysite.com/products/14 的 HTTP GET - 返回产品 14 的 XML 或 JSON
  • HTTP POSTmysite.com/products/14 - 将产品 14 更改为您在 HTML 表单中发布的内容。
  • HTTP DELETEmysite.com/products/14 - 删除产品 14
  • HTTP PUTmysite.com/products - 添加新产品

所以 REST 的工作方式更像您期望的浏览器 URL。这样一来,它就更自然了,而且作为惯例,也更容易理解。所有 REST API 都以类似的方式工作,因此您无需花很长时间学习每个系统的怪癖。

【讨论】:

  • 好的,所以 REST 完全在 HTTP 上完成所有事情,而 Web 服务则完全在 SOAP 上完成,在 Web 服务上,您几乎不需要额外的工具来进行 SOAP 封送处理,对吧?谢谢。
  • 关于 DELETE 和 PUT,由于 REST 主要用于机器之间的通信,因此无法从浏览器访问这些动词可能不是那么重要。我认为说明 REST 对动词的关注非常重要,而 SOAP 将实际命令放入请求中,而不是请求的类型。
  • @vs - 好点。 @Akash Kava - 不完全是,因为 SOAP 也是通过 HTTP 的。您可以从一个简单的网页调用 Javascript 中的任一机制。 REST 的重要之处在于使用 HTTP 动词(GET、POST 等)的约定,而不是调用从 WSDL 读取的方法名称
  • 对以下内容的小修正:“SOAP 是一种通过 HTTP 作为 XML 发送/接收数据的协议。”; SOAP 可以通过任何传输协议,例如 HTTP、FTP、STMP、JMS 等。
  • @ShiDoiSi 已经谈到了这一点,但我觉得对于新手来说还不够清楚。需要明确的是,REST 是客户端-服务器 Web 应用程序的常见解决方案,通过浏览器使用 Web 应用程序的用户可以与 RESTful 服务进行交互;他们只是不能直接这样做。它通常通过将 JavaScript 函数绑定到某个 HTML 元素来完成,然后 JavaScript 依次调用 RESTful 服务(即:PUT、DELETE 等)。这通常使用 jQuery 完成,但当然还有很多其他方法可以做到这一点。
【解决方案2】:

对我来说,使用 RESTful 方法实现的服务在可访问性方面胜过使用 SOAP 或 RPC 的服务。在一个相对封闭的系统中,可以使用工具来生成基于 WSDL 的存根和关联,这并不是非常重要。但是,如果您想创建可供广泛客户端访问和使用的服务,那么 REST 服务的统一性和使用它们的便利性是一大优势,即您不需要繁重的 RPC 堆栈,只需发出 HTTP 请求的能力。

不确定这是否完全回答了您的问题,但如果如您所说,您有一个基于 SOAP 工作的系统(并且您控制客户端和服务器),那么我看不出有任何改变的理由。此外,一些服务自然会更适合基于 RPC 的访问,在这种情况下,SOAP 接口会更合适。

就性能而言,如果您不使用 SOAP,将有效地从客户端和服务器技术堆栈中删除一个或多个层,因此在所有其他条件相同的情况下,公开 RESTful 接口的服务将在那里获胜。

【讨论】:

    猜你喜欢
    • 2015-01-05
    • 1970-01-01
    • 2017-01-06
    • 2013-09-24
    • 2012-03-19
    • 2017-10-02
    • 2013-09-18
    • 2011-08-21
    • 2014-12-01
    相关资源
    最近更新 更多