使 API 调用和数据库操作原子化

Make API call and database operations atomic

我想执行以下操作:

如果插入失败,什么都不做,一切都被回滚。问题是如果事务提交失败,我没有好的方法来回滚 API 请求,因为它不是数据库操作。我唯一能想到的就是从端点删除数据。有没有更好的办法?我正在使用 entity framework。谢谢

所以如果我没理解错的话,你只想在 API 调用成功时提交给数据库,但在数据库生成主键之前不能调用 API从数据库插入。

所以这会导致一种 2 阶段提交类型的方法,但是如果插入成功,API 调用成功,但数据库提交失败会怎样? (如果发生的话!)

因此,我认为您应该考虑改为实施 Saga 设计模式。

这是为复杂的分布式系统设计的,尤其是使用微服务的时候,需要保证跨不同分布式系统的数据一致性。 基本上你建立了一种需要按顺序执行的交易链。然后你一个一个地检查它们,如果成功,你就进入下一个。

但是,对于每笔交易,您还有一笔补偿交易。因此,如果交易失败,那么您可以通过列表向后工作,一个接一个地执行所有补偿交易,直到最后您拥有相同的初始状态。

有不同的方法可以做到这一点,例如基于 Choreography 的 saga 或基于 Orchestration 的 saga。 您可以在此处找到更多详细信息和更好的解释: https://microservices.io/patterns/data/saga.html