【问题标题】:Whats the best way to offer SOAP/XML + REST/JSON?提供 SOAP/XML + REST/JSON 的最佳方式是什么?
【发布时间】:2010-06-22 00:38:55
【问题描述】:

我正在创建一个通用 Web 服务,它可能有许多不同的客户端,其中一些我目前无法预料。

我已经有了一个不错的 Java 服务 API,并希望在此基础上提供一个 Web 服务外观。

关于 SOAP 与 REST 辩论的双方都有很大的争论,这让我想知道是否有一种简单的方法可以同时提供两者?对于同一部署,不一定要同时进行(尽管这可能很好)...而是为客户提供选择。

【问题讨论】:

    标签: java xml json rest soap


    【解决方案1】:

    不,没有。 SOAP 和 REST 是如此不同的架构,以至于任何声称可以轻松实现两者的框架都可能在其中一个方面做得不好。

    虽然很容易将一组函数或方法获取到 WSDL 文件、SOAP 端点等,但这是因为函数和 SOAP 基本上都做同样的事情,对发生的事情没有任何限制。调用者使用多个参数设置函数调用,触发它并(通常)等待响应或异常。

    有些人认为为每种方法创建 HTTP 端点就足以创建一个 RESTful 端点,但事实并非如此。但是,制作这样的 HTTP 端点对您来说可能仍然有意义,在这种情况下,您应该继续寻找提供此功能的框架。

    我的回答以“不,没有”开头的原因是,为了制作一个 REST 接口,仅仅发布 HTTP 端点是不够的,你还需要做很多工作:

    • 寻找可重用的媒体类型
    • 找到要重用的链接关系
    • 设计您自己的媒体类型
    • 定义您自己的链接关系

    而且世界上没有任何框架会采用任意的函数签名列表并为您完成这四件事。框架允许您利用比 SOAP 更多的 HTTP(例如 OAuth、OpenID、缓存、幂等性),但它们不会带您一路 REST。

    【讨论】:

      【解决方案2】:

      是的,您可以同时提供(我建议您这样做)。您可以根据 HTTP Accept 标头(application/soap+xml 与 application/json)或自定义查询参数(例如 http://example.com/myapi?fmt=soap 与 http://example.com/myapi?fmt=json)来决定响应应采用哪种格式。在任何情况下,如果客户端没有明确指定所需的响应格式,您需要有明确的默认回退值。

      您也可以考虑添加 REST/POX 响应格式,将 Atom+可选扩展作为您的响应容器。 (application/atom+xml 和http://example.com/myapi?fmt=atom 以上两种方法)

      【讨论】:

      • 我还是一个网络服务新手,所以我可以要求澄清一下吗?您是说您可以同时提供 SOAP/XML、SOAP/JSON、REST/JSOM 和 REST/POX,方法是使用 HTTP 接受标头来区分调用者想要返回的内容?你如何实现这一点?哪些工具和框架支持这一点?
      • 是的,你没看错。这只是将 Web 服务响应正确序列化为客户端理解的格式的问题。 (顺便说一句,没有 SOAP/JSON 这样的东西。:-))
      • 我不知道是否/有哪些 Java Web 服务框架以及哪些支持响应格式切换,但我想任何现代 Web 服务框架都应该支持它。如果您提供一些您正在使用的特定框架的详细信息,我相信人们将能够准确地告诉您如何使用它。
      • 我还没用过,只是想弄清楚选择一个的重要标准是什么。我有其他人向我推荐的 CXF。能支持吗?
      • 我没用过,不过cxf.apache.orgCXF 支持 SOAP 和 REST/HTTP 绑定以及 XML、JSON 和 FastInforset 消息格式。
      【解决方案3】:

      简而言之,一个 WCF 服务可以为同一个服务合同提供多个端点。一种可以是REST,一种可以是SOAP/XML,一种可以是TCP/IP+binary。

      【讨论】:

      • 这是否特别适用于 WCF?我之前没有提到它,因为我认为它应该无关紧要,但该应用程序是作为 Java servlet 实现的。
      • 是的,这是专门的 WCF。如果您的平台是 Java,则应将其添加到您的标签中。
      【解决方案4】:

      我不是很喜欢soap web 服务,但是在谷歌上搜索我发现来自apache 的Axis 2 框架不仅提供了SOAP 1.1 和SOAP 1.2,而且还提供了具有相同业务逻辑实现的REST/POX。您可以查看更多信息:

      http://ws.apache.org/axis2/

      【讨论】:

        【解决方案5】:

        我会坚持使用简单的 REST 解决方案。 Amazon 为相同的服务提供 REST 和 SOAP api,并且 85% 的时间都在使用 REST 服务,因此如果您对 SOAP 没有特定需求,那么我不会实施它。

        【讨论】:

        • 这是客户要求,因为该系统将成为更大 SOA 战略的一部分。
        猜你喜欢
        • 2011-09-21
        • 2010-09-10
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多