【问题标题】:SOA - Microservices : Use API REST or SOAPSOA - 微服务:使用 API REST 或 SOAP
【发布时间】:2017-08-24 13:56:28
【问题描述】:

我面临一个大难题:在我的公司,我们正在研究微服务架构并切换到完整的 SOA 生态系统。

一些顾问和开发人员表示,将 SOAP 用于 Web 服务会更好,因为它允许指定并向所有开发团队提供经过验证的格式。我害怕使用 SOAP 我们最终会受到限制。

根据您的经验,对于 SOA/微服务架构,使用 SOAP 或 REST API 会更好吗?

提前感谢您提供有用的反馈。

【问题讨论】:

    标签: architecture soa microservices


    【解决方案1】:

    很难根据您在问题中提供的信息来选择架构风格,因为您没有解释您拥有的业务需求或限制的种类。你也没有解释这些服务的用途。

    我使用 SOAP 和 REST 已经有一段时间了,我可以告诉你两者都有 adv/dis。但是,我不会一一列举,而是尝试给出我会选择其中一个而不是另一个的原因和场景。

    休息

    1. 如果服务将被网络浏览器互联网应用程序、移动应用程序消耗(当处理能力“低”时)我会选择 REST,因为通信是以 json 格式进行的,这对 javascript 技术和处理更友好并且解析时间少于 XML。
    2. 当服务将数据作为简单 API 的一部分公开时,允许用户访问以执行 CRUD 操作,或者当流程中不涉及太多业务逻辑时。如果我必须构建公共 API,我也会选择 REST。
    3. 如果时间紧迫,REST 的实现比 SOAP 更简单。由于没有标准,您不需要签订合同。有一些最佳实践,但最后您可以根据需要使用 HTTP 动词并以您喜欢的方式创建 URI 样式,但是拥有如此多的灵活性将使您在某些时候开始使用一种 RPC API 而不是资源API(请记住 REST 更多的是关于资源)。
    4. 如果您的服务的目的是在网页应用上公开信息,请利用浏览器中 http GET 动词提供的缓存。
    5. 从开发人员的角度来看,这始终很重要,构建此类服务的速度更快。您只需要了解一个支持 REST 的框架,例如 JAX-RS、Spring REST、Jersey 和一些 JSON 概念。学习曲线也更小。
    6. 它是一种轻量级的传输信息形式,而且速度更快,因为它不需要大量处理。

    肥皂

    1. 拥有定义服务内通信的合同,您将受此合同约束,您的客户也必须遵守它。本合同的任何变更都会影响您的所有客户。您必须始终记录在您的运营中必须使用哪些合同。
    2. 具有可以在系统集成中工作的有趣标准,如 WS-Interoperability、WS-addressing、WS-security,因此基本上是一种具有多个标准的技术,这使得协议阶段变得更容易,而不是总是实现。李>
    3. 如果您想拥有不同类型的客户端,可以与不同的传输层 smtp、http 一起使用。
    4. 传输二进制数据 MTOM/XOP 或 SwA 的良好标准。如果更喜欢这个发送 PUT 请求正文中的字节。
    5. 更好地定义安全性和完整性,来自标准的许多选项,通常在 REST 中使用较多的是 OAuth。
    6. 从开发人员的角度来看,这将需要更多时间来学习,而且您至少需要具备 XSD、XPath、WSDL 和其他概念的基本知识。在某些情况下,遵循标准并不总是那么容易。你有很好的工具和框架来构建它们 JAX/WS、Spring-ws、CXF。

    在一个试图标准化 IT 基础架构的中小型公司回答您的问题和思考时,我会选择 SOAP,因为它在所有领域都有更成熟的工具支持。就个人而言,我喜欢 SOAP:fault 消息,这是 SOAP 提供的用于业务操作的 RPC 样式。假设您的微服务与特定领域无关,我认为拥有某种 ESB 可以帮助您管理整个基础架构并设置您的业务规则。有时,人们可能会认为 SOAP 过度设计了解决方案。但是,我同意这个想法,因为它是一个已经在市场上存在一段时间的标准。

    【讨论】:

    • 我同意最后一种说法,即在企业级别,您似乎会有外部消费者。当您有一个标准的文档化接口(即 SOAP)时,当您有外部消费者时,这就不那么令人头疼了。
    【解决方案2】:

    可以说,微服务架构的最大好处是提高了将新功能推出生产的速度。为了实现微服务应该尽可能地相互独立。与 REST 合同相比,WSDL 合同倾向于导致更紧密的耦合。从这个角度来看,选择 REST 很有意义。但这一切都取决于您在决定采用微服务或 SOA 架构时确实想要实现的目标。

    【讨论】:

      【解决方案3】:

      随着用于定义 REST API 的 RAML 和 Swagger 等标准的发展,SOAP 和 REST Web 服务之间的差异正在缩小。如果重点是像前面回答者提到的那样公开 API,那么 REST 是更好的选择,因为有很多轻量级 API 管理产品支持这一点。

      【讨论】:

        猜你喜欢
        • 2015-01-31
        • 2021-05-11
        • 2017-08-27
        • 2016-11-25
        • 2015-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        相关资源
        最近更新 更多