Web services web服务应该是事务性的吗?

Web services web服务应该是事务性的吗?,web-services,rest,wsdl,Web Services,Rest,Wsdl,我正在研究为应用程序编写web服务。在这个应用程序中,我们在事务中做任何事情,因为“工作单元”通常不是单个实体,而是跨多个表的多个实体。在某些情况下,我们需要“要么全有,要么什么都没有”,而交易是完全有意义的。然而,我并不确定如何在web服务中做到这一点,也不知道我是否应该这样做 我觉得web服务应该是无状态的,所提供的API应该基于每个实体构建,但我不确定如何处理“工作单元”,如果某个部分出现故障,应该进行回滚 Web服务应该是事务性的吗?您将如何实现事务,它是否会像发送“开始事务”和以“结束

我正在研究为应用程序编写web服务。在这个应用程序中,我们在事务中做任何事情,因为“工作单元”通常不是单个实体,而是跨多个表的多个实体。在某些情况下,我们需要“要么全有,要么什么都没有”,而交易是完全有意义的。然而,我并不确定如何在web服务中做到这一点,也不知道我是否应该这样做

我觉得web服务应该是无状态的,所提供的API应该基于每个实体构建,但我不确定如何处理“工作单元”,如果某个部分出现故障,应该进行回滚

Web服务应该是事务性的吗?您将如何实现事务,它是否会像发送“开始事务”和以“结束事务”结束一样

如果web服务是无状态的,您如何处理不独立的“工作单元”? 关于这个话题,我能读到什么权威性的文献吗


谢谢,

web服务可能是全部的,也可能不是幕后的,但是您可以选择向客户端公开什么

如果希望客户机了解提交/回滚行为,则必须在API中提供“补偿事务”。因此,如果一个用例创建了一个新事务,您必须提供一个补充方法来删除它,并告诉用户创建成功还是失败。与所有其他方法相同

我认为这暴露了该服务所做的太多事情。客户被迫知道太多。这是一个糟糕的封装

我认为将知识隐藏在服务中是更好的设计。向用户报告成功或失败,但仅此而已


这意味着您必须将服务设计为足够粗粒度,以包含完整的工作单元。让它协调数据源和其他服务以实现用例。

关于这个主题的规范性论文之一是Pat Helland的。强烈推荐。

我认为web服务层不会是事务中的参与者,而是请求由下面的层完成事务,并向客户端报告结果,无论是提交还是回滚。如果您被要求提供一个超越一个应用程序节点内可能发生的事务逻辑,我将称之为“设计气味”。