我最近一直在阅读有关SOA的很多内容,但大部分内容都与SOAP相关,并且有许多属于C#/ Java系统的“官僚”内容。老实说,我认为这种官僚主义,特别是SOAP,是屁股的痛苦。所以,我很好奇,SOA可以用REST设计吗?
现在,在Ruby应用程序中,我将所有控制器都设置为RESTful。我的Web界面(表单等)向核心发出GET / POST / PUT / DELETE请求,这是一个REST Web服务。使用该核心的所有其他系统都会向其发出RESTful请求。这是一个SOA吗?
答案 0 :(得分:23)
在较高级别,答案是肯定的,但不完全。
SOA需要根据
来考虑系统能够撰写新的更高级别的服务或业务流程是良好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提供主要优势的原因。
假设您有一个订单处理应用程序,其操作类似于 -
最初,您创建了一个按顺序使用这些操作的进程(使用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堆栈...大多数其他语言都做不