REST 中的并发 api
Concurrency in a REST api
上下文
我正在创建一个基本的 REST API - 我并不真正关心目的,这只是一个例子 - 我有一个包含以下内容的购物车:
- 不同产品对应的项目列表。
- 状态:超时、已购买。购物车有有效期限制。
- A link 付款:我不会详细说明。
客户可以通过 POST 与购物车交互,在购物车上附加商品和数量。添加项创建sub-resources,客户端可以通过更新(PUT)或删除(DELETE)来处理项。
像那样:https://blog.apigee.com/detail/does_your_api_need_to_be_truly_restful
服务器负责更新购物车的状态。我希望它不会破坏 REST 原则,但他会更新:
- with PURCHASED 付款完成后(从购物车资源付款 link 并且所有项目都被删除)
- TIMEOUT 当第一个项目添加到购物车时。
问题
客户端通过附加项目修改购物车资源。
服务器在超时到期时修改它"alone"。
当客户端在超时到期后追加项目时发生并发。
解决的话,乐观锁好像比较合适。然后使用 ETag header,客户端修改购物车资源并知道其他人何时修改了它。
问题
在这种情况下,并发是在客户端和服务器之间。
当服务器自行修改资源时更新 ETag header (Last-Modified) 是否相关?
谢谢!
是的。这是对 ETag 的恰当使用。
当购物车中有新商品或购物车状态发生变化时,ETag 响应 header 应该会发生变化,例如已过期。
客户端可以记住 ETag 并在用户更改购物车时发送它,在请求的 if-match
header(在 PUT/POST/DELETE 调用中)。如果 ETag 不同,服务器应该 return 一个 412 代码。
上下文
我正在创建一个基本的 REST API - 我并不真正关心目的,这只是一个例子 - 我有一个包含以下内容的购物车:
- 不同产品对应的项目列表。
- 状态:超时、已购买。购物车有有效期限制。
- A link 付款:我不会详细说明。
客户可以通过 POST 与购物车交互,在购物车上附加商品和数量。添加项创建sub-resources,客户端可以通过更新(PUT)或删除(DELETE)来处理项。
像那样:https://blog.apigee.com/detail/does_your_api_need_to_be_truly_restful
服务器负责更新购物车的状态。我希望它不会破坏 REST 原则,但他会更新:
- with PURCHASED 付款完成后(从购物车资源付款 link 并且所有项目都被删除)
- TIMEOUT 当第一个项目添加到购物车时。
问题
客户端通过附加项目修改购物车资源。 服务器在超时到期时修改它"alone"。
当客户端在超时到期后追加项目时发生并发。
解决的话,乐观锁好像比较合适。然后使用 ETag header,客户端修改购物车资源并知道其他人何时修改了它。
问题
在这种情况下,并发是在客户端和服务器之间。
当服务器自行修改资源时更新 ETag header (Last-Modified) 是否相关?
谢谢!
是的。这是对 ETag 的恰当使用。
当购物车中有新商品或购物车状态发生变化时,ETag 响应 header 应该会发生变化,例如已过期。
客户端可以记住 ETag 并在用户更改购物车时发送它,在请求的 if-match
header(在 PUT/POST/DELETE 调用中)。如果 ETag 不同,服务器应该 return 一个 412 代码。