30

我最近阅读了很多关于 SOA 的内容,但大部分内容都是与 SOAP 相关的,并且有很多属于 C#/Java 系统的“官僚”内容。老实说,我认为这样的官僚作风,特别是 SOAP,是一种痛苦。所以,我很好奇,可以用 REST 设计 SOA 吗?

现在,通过 Ruby 应用程序,我将所有控制器都设为 RESTful。我的 Web 界面(表单等)向核心发出 GET/POST/PUT/DELETE 请求,这是一个 REST Web 服务。所有其他使用核心的系统都会向它发出 RESTful 请求。这是 SOA 吗?

4

3 回答 3

32

在高层次上,答案是肯定的,但不完全是。

SOA 需要从以下方面考虑系统

  • 服务(定义明确的业务功能)
  • 组件(离散的代码和/或数据结构)
  • 流程(服务编排。一般使用 BPEL)

能够组合新的更高级别的服务或业务流程是良好 SOA 的基本特征。XML、基于SOAP 的Web Services 和相关标准非常适合实现SOA。

SOA 也有一些公认的原则 - http://en.wikipedia.org/wiki/Service-oriented_architecture#Principles

  • 标准化服务合同——服务遵守由一个或多个服务描述文档共同定义的通信协议。
  • 服务松散耦合——服务保持一种最小化依赖关系的关系,只要求它们保持对彼此的了解。
  • 服务抽象——除了服务契约中的描述之外,服务对外界隐藏了逻辑。
  • 服务可重用性——将逻辑划分为旨在促进重用的服务。
  • 服务自治——服务可以控制它们封装的逻辑。
  • 服务粒度——在服务操作中提供最佳范围和正确粒度级别的业务功能的设计考虑。
  • 服务无状态——服务通过在必要时推迟状态信息的管理来最小化资源消耗
  • 服务可发现性——服务以可有效发现和解释的通信元数据为补充。
  • 服务可组合性——服务是有效的组合参与者,无论组合的规模和复杂性如何。

基于 SOA 的体系结构应该具有服务定义。由于 RESTful Web 服务缺乏明确的服务定义(类似于 wsdl),因此基于 REST 的系统很难满足上述大部分原则。

要使用 REST 实现相同的目标,您需要拥有 RESTful Web 服务 + 编排(可能使用一些轻量级 ESB,如 MuleESB 或 Camel)

另请参阅此资源 -从 SOA 到 REST


添加此部分以澄清以下评论 -

编排是组成流程所必需的。这就是 SOA 的主要优势所在。

假设您有一个订单处理应用程序,其中包含以下操作 -

  • 添加项目
  • 加税
  • 计算总计
  • 下订单

最初,您创建了一个按顺序使用这些操作的流程(使用 BPEL)。您有使用此组合服务的客户。几个月后,一个新的客户来了,他有免税,那么你可以创建一个新的流程来跳过 addTax 操作,而不是编写新的服务。因此,您只需重用现有服务即可更快地实现业务功能。在实践中,有多种此类服务。

因此 BPEL 或类似的(ESB 或路由)技术对于 SOA 来说是必不可少的。没有业务用途,SOA 就不是真正的 SOA。

交叉发布在我的个人博客 - http://blog.padmarag.com

还要检查我遇到的这个新资源 -基于 REST 的 SOA

于 2012-05-08T08:27:53.963 回答
7

SOA 术语中的服务是解决特定业务问题的组件。SOAP/WCF 与 SOA 的接口/交付部分更相关。也可以使用 REST 方法。服务合同、策略、版本控制和其他“标准”SOA 特性也可以通过 RESTful 服务实现。

主要的 RESTful 问题是它是针对 CRUD 的,因此它不是复杂逻辑实现的最佳选择。但是如果你的业务逻辑完全是 CRUD(或收敛到 CRUD),那应该没问题。

顺便说一句,看起来微软专门为 WCF 数据服务添加了操作来模拟带有 REST 的 SOAP。

于 2012-05-08T07:36:33.437 回答
3

SOA 最重要的一点是软因素,例如让其他人使用您的服务,反之亦然,拥有一个 wsdl 链接,您可以从中构建一个易于使用的代理,这几乎是必不可少的。服务需要是可组合的......但您不需要编排、BPEL 或花哨的总线来执行此操作,当您开始使用 SOA 时我不推荐它们。(事实上​​,使用这些我认为没有它们你可以获得更好的结果,但你确实需要事件)

注意像 WCF 这样的产品允许您创建一个公开 wsdl 的服务,但除了 SOAP 之外,您还可以使用 REST/Json 甚至更好的二进制 TCP 端点。这是理想的,因为您使用 SOAP 是为了简单起见并切换到二进制(这吹休息时离开水)当你需要的时候。

就 SOAP 而言,在使用 WCF 构建高性能 SOA 系统的 8 年中,我从未注意到 SOAP 甚至在那里。那是因为我主要使用 C# 工作,并且我们有一个很好的 SOAP 堆栈。大多数其他语言都没有。

于 2013-07-09T10:19:15.647 回答