确保多个REST调用的事务完成

时间:2016-08-25 00:34:58

标签: rest jboss transactions

我们公开可以公开POST,PUT,GET和DELETE操作的REST服务。消费者通常以这样的方式设计用户界面,即用户只需单击即可创建,更新和删除。如果他们向我们发送三次PUT POST和DELETE调用,那么其中一个可能会失败并导致数据不一致。 目前我们创建了一个包装器服务,允许它们调用一个调用所有三个操作的服务,并且我们保证使用JBOSS事务控制进行事务,因此如果一个操作失败,则回滚所有事务。

是否有更好的处理方法,这可以帮助我们避免创建这些包装服务?

1 个答案:

答案 0 :(得分:0)

简答:不,没有。

您正在寻找"交易"支持您的REST服务。有很多在线资料(虽然没有开箱即用的解决方案),包括这个问题:Transactions in REST?

我认为重要的是要注意事务的概念在某种程度上与无状态分布式系统的概念相冲突。有些人正致力于将事务转换为REST(https://www.atomikos.com/Blog/TransactionsForTheRESTOfUshttp://www.jboss.org/reststar/specifications/transactions.html),但一般来说,解决方案是以不需要分布式事务的方式设计系统。

直接导出数据库记录操作作为CRUD操作是大多数时候的罪魁祸首。如果您正在这样做,只要尝试为客户提供具有实际意义的资源,您就会发现大多数问题都会消失。

作为旁白,为金融机构工作,需要交易将钱从一个账户转移到另一个账户的经典例子相当简单。它在现实生活中并不起作用,而且很多(包括某种形式的实际汇款)在这个意义上并不是交易性的。