2015-05-06 30 views
2

语境

我创建一个基本的REST API - 我真的不关心的目的,它只是一个示例 - 在那里我有一个包含购物车:并发的REST API

  • 与不同产品对应的项目列表。
  • 状态:要么超时,购买。购物车的有效期有限。
  • 支付的链接:我不详细的。

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

就像是:https://blog.apigee.com/detail/does_your_api_need_to_be_truly_restful

服务器负责更新车的状态。我希望这不会打破REST原则,但他将更新之一:

  • 购买的在付款的时候完成(从购物车资源支付链接,并将所有的项目将被删除)
  • 超时当第一个项目已被附加到购物车。

问题

客户通过附加项修改车资源。 服务器在超时过期时“单独”修改它。

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

为了解决这个问题,乐观锁似乎是合适的。然后用ETag头,客户端修改购物车资源,并知道别人何时修改它。

问题

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

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

谢谢!

回答

3

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

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

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

+1

太好了,谢谢!(顺便说一下,由于我的声望低于15,我不能满足你的答案) – AilurusFulgens