REST api中的并发

时间:2015-05-06 15:06:46

标签: api rest concurrency hateoas

上下文

我正在创建一个基本的REST API - 我并不真正关心它的目的,这只是一个例子 - 我有一个包含以下内容的购物车:

  • 与不同产品对应的商品列表。
  • 状态: TIMEOUT PURCHASED 。购物车的有效期有限。
  • 付款链接:我不详细说明。

客户可以通过 POST 与购物车互动,在其上附加商品和数量。附加项创建子资源,客户可以通过更新( PUT )或删除( DELETE )来处理项目。

就像那样:https://blog.apigee.com/detail/does_your_api_need_to_be_truly_restful

服务器负责更新购物车的状态。我希望它不会违反REST原则,但他会更新:

    付款完成后
  • PURCHASED (购物车资源的付款链接以及所有项目都已删除)
  • 当第一个项目附加到购物车时,
  • TIMEOUT

问题

客户通过附加项目来修改购物车资源。 当超时到期时,服务器“单独”修改它。

当客户端在超时过期后附加项目时发生并发。

要解决它,乐观锁似乎是合适的。然后使用ETag标头,客户端修改购物车资源,并在其他人修改它时知道。

问题

在这种情况下,并发性在客户端和服务器之间。

当服务器自己修改资源时,更新ETag标头(Last-Modified)是否相关?

谢谢!

1 个答案:

答案 0 :(得分:3)

是。这是对ETag的适当使用。

当购物车中有新商品或购物车状态发生变化时,ETag响应标题应该会改变,例如到期了。

客户端可以记住ETag并在用户更改购物车时在请求的if-match标头中发送它(在PUT / POST / DELETE调用上)。如果ETag不同,服务器应返回412代码。