如何处理RESTful应用程序中的竞争条件?

yeg*_*256 6 java rest design-patterns web-services

以下是我的RESTful Web应用程序中发生的情况:

  1. HTTP请求进来
  2. 该应用程序开始构建响应,其中包含一些初始数据部分
  3. 另一个请求更改了步骤2中使用的数据
  4. 第一个请求了解数据已过期

它该怎么办?请求失败并将错误返回给客户端?或者它应该从头开始(花费的时间比客户预期的多)?

tec*_*oma 2

假设它与数据库事务无关,并且每个步骤都涉及分布式长时间运行的进程。

在这种情况下,应向客户端发送适当的响应(例如 409/410 http 代码),其中包含指示该请求不再有效且客户端应重试的详细信息。重试可能最终会陷入循环,或者最坏的情况最终会做客户端不知道的事情。

例如,当您在线预订酒店/机票时,您会收到一条回复,告知价格已更改,您需要重新提交才能以新价格购买。