SOA可以用REST设计吗?

时间:2012-05-08 02:34:07

标签: architecture soa

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

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

3 个答案:

答案 0 :(得分:23)

在较高级别,答案是肯定的,但不完全。

SOA需要根据

来考虑系统
  • 服务(明确定义的业务功能)
  • 组件(离散的代码和/或数据结构)
  • 进程(服务编排。通常使用BPEL)

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

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

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

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

要使用REST实现相同的目标,您需要使用RESTful Web Services + Orchestration(可能使用一些轻量级的ESB,如MuleESB或Camel)

另请参阅此资源 - From SOA to REST


添加此部分作为以下评论的说明 -

编排流程需要编排。这就是SOA提供主要优势的原因。

假设您有一个订单处理应用程序,其操作类似于   -

  • addItem
  • addTax
  • calculateTotal
  • placeOrder

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

因此,BPEL或类似(ESB或路由)技术对SOA至关重要。没有业务用途,SOA实际上不是SOA。

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

另请查看我遇到的这个新资源 - REST based SOA

答案 1 :(得分:6)

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

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

顺便说一句,看起来Microsoft向WCF数据服务添加了操作,特别是用REST模拟SOAP。

答案 2 :(得分:2)

关于SOA的最重要的事情是软因素,例如让其他人使用你的服务,反之亦然,为此你可以建立一个易于使用的代理的wsdl链接几乎是必不可少的。服务需要是可组合的..但是你不需要Orchestration,BPEL或花哨的总线来实现这一点,当你从SOA开始时我不会推荐它们。 (实际上已经使用了这些,我认为没有它们你可以获得更好的结果,但你确实需要事件)

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

对于使用WCF构建高性能SOA系统8年的SOAP,我从来没有注意到SOAP就在那里......那是因为我主要使用C#并且我们有一个很好的SOAP堆栈...大多数其他语言都做不