REST 中的并发 api

Concurrency in a REST api

上下文

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

客户可以通过 POST 与购物车交互,在购物车上附加商品和数量。添加项创建sub-resources,客户端可以通过更新(PUT)或删除(DELETE)来处理项。

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

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

问题

客户端通过附加项目修改购物车资源。 服务器在超时到期时修改它"alone"。

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

解决的话,乐观锁好像比较合适。然后使用 ETag header,客户端修改购物车资源并知道其他人何时修改了它。

问题

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

当服务器自行修改资源时更新 ETag header (Last-Modified) 是否相关?

谢谢!

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

当购物车中有新商品或购物车状态发生变化时,ETag 响应 header 应该会发生变化,例如已过期。

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