2016-02-12 73 views
1

我在SOA这个概念上挣扎。假设有一个包含大量特定业务逻辑和资源的大项目。从我发现的SOAP和REST的意义上讲,业务逻辑部分是SOAP,资源/ CRUD部分是REST。使用SOAP和REST实现的SOA

我想到的想法是使用SOAP作为公共入口点并使用REST作为SOAP的内部API(因为它不应该具有业务逻辑),这样我就可以利用两者的强度结构。

这里的问题是写入详细/概要请求可能会在REST和SOAP服务中,这不利于维护。

应该避免混合使用SOAP和REST,还是可以以我描述它的正确方式使用它们?

编辑我会试着做一个更具体的案例。我也遇到了一篇好文章http://www.infoq.com/articles/tilkov-rest-doubts。这将通过对模型进行不同的重命名来解决在REST中使用业务逻辑的许多问题。

例如,如果您有产品订购并且您有折扣,可以在创建POST产品后以/订单 URL为例进行计算。并且该折扣在GET产品/订单URL后可见。这完全符合REST。

然而,当由于某种原因,你不能有产品Xÿ以相同的顺序,这似乎有点难以在REST的服务来做。因为你必须给出正确的错误信息,如'xy不能按照一个顺序',这暴露了业务逻辑,似乎更适合于SOAP。有没有办法做到这一点是REST,如果是这样,在这种情况下使用REST更好吗?

回答

2

一个广泛的问题,或许太宽泛。当然,这取决于你在建什么。如果你提供更多的细节,平台,针对什么样的设备等,你会得到更好的答案。

但是,请考虑构建RESTful API for public,internal和internal。我建议查看ServiceStack https://github.com/ServiceStack/ServiceStack/wiki/Why-Servicestack docs讨论api的方法。即使你不使用他们的工具集,这些概念也会帮助你建立你自己的web api。

+0

感谢您的回答。我用一些额外的数据更新了我的问题。如果你有x你不能做y并且应该做z,那么这个平台有很多逻辑。 –

+0

好吧,我为车辆配置器的客户做了类似的事情,他们可以在车辆上添加选项。当然,一些选项依赖于其他选项,x必须有y,一些是互斥的,x不能与y等等。我有一些服务器业务层执行规则,在我的api中,我将车辆连同其最近一次有效的选项列表一起退回,然后列出“无法添加的选项”以及原因。 WCF或REST,它不是阻止你在这里的技术 - 你可以在邮件中返回任何你需要的东西。 – richardb