乐观锁定:使用另一个资源修改一个资源

Optimistic locking: modifying a resource using another resources

示例用例:用户使用实际产品列表(资源 LP/资源列表 P)修改烹饪食谱(资源 C)。资源 C 和 LP 都可能被其他用户同时更改。列表 (P) 中的任何产品也可能会更改。如果这些资源中的任何一个被更改,客户端应该有相应的错误来响应修改 PUT。

问题:确保用户在更改配方时使用未更改数据的最佳做法是什么?我们可以使用 ETag (RFC 7232) 方法来强制执行并发访问规则吗?如果不是,我们如何修改API结构或使用其他方法来实现它?我的问题是如何使用来自多个资源的 ETag 来执行 RFC。

据我所知,在这种特殊情况下,我们可以使用 POST 逐一添加产品等。但在现实生活中,情况可能很复杂,请考虑来自多个集合的构建器或资源,例如。

是的,请这样做!您需要将作为请求的一部分(在 If-Match header 中)传递的 ETag 与服务器当前表示的 ETag 进行比较。如果它们匹配,则继续并更新值。如果他们不这样做,return a 412 Precondition Failed.