如何处理在同一对象上同步2个连续的REST调用

时间:2014-09-10 06:44:20

标签: rest concurrency stateless

我遇到一些UI问题,导致它同时一个接一个地发送2个put请求。

问题在于,执行PUT操作的REST API会将数据库中的对象与UI发送的对象进行比较,并相应地进行更新(假设我已将项目添加到购物车中)

因为这两个调用是同时进行的,所以第二个调用在第一个调用能够修改它之前从数据库中获取对象,导致添加的项目被添加两次而不是一次。

让我们把UI问题放在一边,为了论证,这是无状态环境中的一般同步问题,我想知道一些处理这个问题的约定

感谢。

1 个答案:

答案 0 :(得分:0)

我在项目中所做的是在应用程序中的每个实体上创建一个修改的(一个长的,即时间戳)字段。为了使PUT(或任何其他修改命令)成功,客户端需要发送最后一个(数据库中的一个)修改值。如果业务逻辑发现数据库中修改的内容与发送的客户端相同 - 服务器执行操作,否则使用正确的(自定义)错误拒绝它。

这需要2件事情:

  1. 需要同步业务逻辑代码(如果您需要高性能的更新,这不是一件好事)。
  2. 客户端需要在PUT之前执行GET才能使用上一个修改后的值进行更新(它可能会导致它(可能)在修改操作之前向用户显示实体)。
  3. 希望这会有所帮助+可能有一种更为标准的方法,我不知道这一点。