在高层次上,答案是肯定的,但不完全是。
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