我有一个称为CancelOrder
的REST端点。它包括四个步骤(依次):
cancelled
(在我们的本地数据库中)。这是一个PUT
操作,因此,我试图使其成为幂等且具有故障保护功能。
方案1:
只需一个电话:
取消实现,取消报价,更新状态。很好。
收到其他呼叫时,呼叫正在中途。假设不存在悲观锁定:
订单状态尚未通过上一次调用更改为“已取消”,但已取消履行。现在,当第二个调用尝试取消实现时,它将返回一个错误。
处理上述情况的理想方法是通过在每次调用时获取文档上的写锁来使API具有事务性。但是我不想那样做。
我应该如何处理这种情况?
答案 0 :(得分:1)
有两种方法(在许多其他解决方案中)来处理这种情况:
解决方案A:
isCanceling
的顺序添加新状态。服务器收到订单的第一个取消请求后,将此状态设置为true
。取消操作完成后,将此状态设置为false
。isCanceling
,则服务器将102 Processing
返回给客户端,表明操作正在进行中。解决方案B:
isCanceling
,则服务器将不执行任何操作,只需要在上述队列中添加相应的侦听器即可。我个人更喜欢解决方案B。