【问题标题】:SOAP or REST as a Client [closed]SOAP 或 REST 作为客户端 [关闭]
【发布时间】:2009-10-22 14:18:04
【问题描述】:

我看到多个问题询问 Web 服务本身开发中的 SOAP 或 REST 哪个更好。但是,从客户的角度来看,关于利弊的讨论并不多。如果您要编写一个应用程序并在两种 Web 服务 API 之间进行选择,它们在各方面都相似,除了一个是 SOAP,另一个是 REST,您会选择哪一个,为什么? REST 具有允许使用 XML 或 JSON 的额外好处,两者之间还有其他主要区别吗?

【问题讨论】:

    标签: web-services rest soap preferences


    【解决方案1】:

    哇,10 个小时,到目前为止还没有答案。通常这些类型的问题会在瞬间跳出来。

    无论如何,对于您的问题,这里有一个奇怪的答案。选择应该取决于几件事:

    1. 这两个 API 的文档有多好。
    2. API 更改的可能性有多大。
    3. 我需要多少时间来生产客户
    4. 客户端可能使用多长时间。
    5. REST api 文档是否包含 URL 列表以及它们返回的 XML/JSON?

    具有更好文档的 API 很可能是更好用的 API。这不能保证,但它是一个很好的指标。如果实现是垃圾,那么无论 SOAP 是否比 REST 更好,反之亦然,这都无关紧要。

    如果这是一个全新的 API,由一家初创公司创建,并且可能会在明年发生重大变化,那么 REST API 可能会更易于管理。 SOAP api 往往非常脆弱,并且由于生成的客户端代理代码需要频繁地重新编译客户端。

    尽管我讨厌客户端生成的代理代码有 1001 个原因,但如果您需要让某些东西真正快速运行。将您最喜欢的 IDE 指向 WSDL 块将很快让您使用对象模型。这绝对是让某件事情发挥作用的最快方式。

    如果客户端将存在数年,那么我认为值得投入时间来生产一个好的 REST 客户端。基于 REST 的方法对随着时间的推移将发生的不可避免的变化更具弹性。与基于 SOAP 的版本相比,版本 REST 客户端还有更多选择。

    最后一项是测试 REST API 是否是真正的 REST 接口的试金石。如果文档是 http 端点的目录,那么您可以确信设计人员不知道 REST 是什么,所以远离它。

    【讨论】:

      【解决方案2】:

      你的假设有缺陷。

      你说:

      如果您要编写应用程序 并在两个 Web 之间进行选择 每个服务 API 都相似 除了一种是 SOAP 和另一种 是 REST,你会选择哪个 为什么?

      说实话,SOAP API 很可能与 REST 系统完全不同,因此您无法在这个级别上进行真正的比较。

      REST 是一种架构,而不是一种协议。 SOAP 是一种协议,但不是一种体系结构。尽管可能,但您不太可能在 SOAP 协议之上创建 REST 架构,因为 SOAP 有效负载不会为 REST 系统提供很多功能。

      SOAP 系统更倾向于基于 RPC,而 REST 系统则基于资源。这两者在操作上和设计上的差异很大。

      就在 HTTP 上使用 SOAP 与 XML/JSON(许多人错误地将其与 REST 混为一谈)而言,SOAP 系统的主要好处是可用于使与系统的接口和从系统发布更容易的工具。

      如今,许多 IDE 和服务器都可以轻松发布和使用 SOAP Web 服务。

      在 Java 中,发布 SOAP 接口可能比在文件中粘贴“@WebService”并部署它多一点。使用 Web 服务只不过是将 IDE 指向 WSDL(在发布 Web 服务时为您方便地创建),单击按钮,并让工具创建编组数据和与服务通信所需的代理。

      基于 HTTP 的 XML/JSON 有一个好处,即您可能会跳过许多使 SOAP 自动化“容易”的样板。当然,Javascript 非常擅长使用 JSON,因此如果您的客户端空间包括 Web 浏览器,这可能是一个因素。

      归根结底,如果您将浏览器与服务器对话,则基于 HTTP 的 XML/JSON 运行良好,实际的 REST 架构也可以运行良好。

      如果您谈论的是服务器之间的 RPC,那么 SOAP 更容易实现,因为现在有可用的工具。

      【讨论】:

        猜你喜欢
        • 2012-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-25
        • 1970-01-01
        • 1970-01-01
        • 2011-03-07
        • 1970-01-01
        相关资源
        最近更新 更多