【问题标题】:What is the difference between SOA and ROASOA和ROA有什么区别
【发布时间】:2013-06-10 18:43:01
【问题描述】:

据我所知,SOA(面向服务的架构)基于离散软件模块的集合,称为服务。这些服务可以与网络范围内的任何其他服务交换信息,而无需人工交互。 SOA 使用 SOAP 或 REST 协议在各种服务之间传输 XML 或 JSON 文档。

但我对 ROA(面向资源的架构)以及这两种架构之间的区别感到困惑。

任何帮助将不胜感激,如果我错了,请纠正我。

【问题讨论】:

  • 参见 Leonard Richardson、Sam Ruby 所著的《"RESTful Web Services - Web services for the real world"》一书。他们进行了详细的比较。
  • Tichodroma@Thanx,但我在搜索在线文章时尝试了它,但我无法得到它。所以我想到了专家对这个话题的意见。

标签: web-services rest soap


【解决方案1】:

正如术语所暗示的,面向服务的架构面向服务,面向资源的架构面向资源。一般来说,A 和 B 两件事之间的差异通常最好通过定义 A 和 B 的本质来解释。所以归结为一个问题,什么是“服务”,什么是“资源”?

我将把大部分内容留给读者,因为大多数开发人员可能都知道两者是什么。虽然它实际上并不那么容易,因为一件事既可以被视为一种服务,也可以被视为一种资源(类似于经典的Wave-Particle duality of light in physics)。例如,Flickr 是一项为您提供照片的服务,但也可以被视为照片资源。但基本上,资源更多的是静态数据(如照片),而服务更多的是处理(例如交付照片,或调整照片大小以便显示一张缩略图)。

通过查看应用程序实现其“功能”的方式,我最了解其中的区别:

  • 使用面向服务的架构构建的应用程序更像是“Facade”,例如它根据它在“幕后”(可能通过网络)使用的服务中的功能组合或组合其传出功能。例如。它的核心处理包括调用外部服务,为它们提供参数,并将结果与​​可能的用户额外处理或算法相结合。
  • 使用面向资源的架构构建的应用程序在内部进行更多处理(例如,与调用外部组件相反),但使用外部资源作为输入。例如。它的核心处理包括检索静态资源,然后在内部进行更多计算。

【讨论】:

    【解决方案2】:

    我先纠正一下:)

    为了回答这个问题,我们只说 REST 是一种组织资源和您对它们执行的操作的方式。

    SOA 使用 SOAP 或 REST 协议在各种服务之间传输 XML 或 JSON 文档。

    绝对不是。 REST 不是协议。 SOAP 是一种协议,这是真的。它经常用于 SOA 架构中,特别是用于 SOAP over HTTP 或 SOAP over JMS 的实现。然而,SOA 并不意味着 SOAP。您可以使用任何其他协议。 这同样适用于 XML 和 JSON。您可以使用任何其他语言或方言。

    现在解释一下。 SOA 是面向服务的架构。因此,整个系统由通常执行某些操作的服务组成。该架构基于此。想象一个服务器云,其中每个服务器至少拥有一项服务,例如 WeatherPredictor、ForexCalculator 等。

    与此相反,您拥有面向资源的架构 ROA,其中系统由资源组成。想象一个服务器云,其中每个服务器代表一个或多个资源,例如天气、欧元、美元……

    ROA 通常用于大型开放系统,因为它带来的优势。在 ROA 架构中,您通常会找到 RESTfull 服务。现在,RESTfull 服务通常仅使用基于 HTTP 的 JSON 或基于 HTTP 的 XML 来实现。

    SOA 无处不在。在 SOA 中,您通常会发现 SOAP over HTTP、SOAP over JMS 等。

    但有一天,您可能会遇到一个 RESTfull Web 服务,它出于某种奇怪的原因使用 SOAP(也许开发人员需要出于某种模糊的原因将消息嵌入到 SOAP 信封中)。我认为您不会在现实生活中找到此示例,而只是为了向您展示 SOA 或 ROA 并不暗示要使用的协议,在本例中为 SOAP。

    希望这会有所帮助。

    【讨论】:

    • 我理解并同意您的纠正(REST 不是协议(而是一种架构风格)O。但我不太了解您的 ROA 示例,尽管这似乎是问题。外汇是一种“外汇交易”。我会自己尝试回答。
    【解决方案3】:

    根据我的经验,我的理解如下:

    ROA 是数据模型之上的 API 封装,SOA 是功能模块之上的 API。

    ROA 用于提供 CRUD 操作。 SOA 用于在运行时链接模块。

    ROA 将 API 使用者与数据模型的更改隔离开来。 SOA 允许替换模块,简化部署和定制。

    【讨论】:

      【解决方案4】:

      两种主要的分布式系统是:

      • 请求/响应类型系统
        • REST - 面向资源
          • 与 HTTP 资源的通信
          • 通过 HTTP GET、PUT、POST 等方式涉及资源生命周期的操作。
          • 资源数据可以缓存
        • SOAP - 面向服务
          • 涉及与特定应用服务的通信
          • 不涉及服务生命周期管理的生命周期操作
          • 所有消息都发送到服务端点
          • 端点决定如何处理请求
        • EJB - 面向对象
          • 与对象的通信
          • 涉及对象的编组解组
          • 有状态
      • 消息传递类型系统 - 消息队列

      您应该能够从这里区分 SOA 和 ROA 之间的区别。

      【讨论】:

        【解决方案5】:

        ROA(面向资源的架构)只是使用 REST 服务的 SOA(基于服务的架构)的一个花哨名称。

        • SOA 相对于 ROA 的主要优势是更成熟的工具支持,XML 请求的类型安全。
        • ROA 的主要优势在于易于实施、设计敏捷性和轻量级的处理方法。

        对于Further

        【讨论】:

        • ROA 是面向资源的架构。它与 RESTful 有关,但 R 不是来自那个。
        • 我想肯定还有更多的东西 ;-)
        猜你喜欢
        • 2012-03-18
        • 2015-12-08
        • 1970-01-01
        • 2011-03-30
        • 2011-01-17
        • 2023-03-04
        • 2022-11-08
        • 2014-04-17
        • 2010-10-02
        相关资源
        最近更新 更多