使用If-Match
在Web服务上实现乐观锁定方案有哪些经验?
为简化起见,我们假设我们正在构建一个简单的CMS,仅由“页面”组成,每个页面只有一个正文。如果两个用户同时开始编辑同一页面,则只提交最后保存的用户所做的更改(或者更确切地说,它们会覆盖其他用户所做的更改。)
为了防止这种情况,我计划使用条件PUT
,即获取ETag
响应头的值,并将其作为If-Match
标头的值提供给{ {1}}请求。如果此值与基于页面当前状态的值不匹配,则服务器会使用412拒绝PUT
。
我知道明显的陷阱,在前置条件检查和实际数据库更新之间可能会出现竞争条件,但这些可以通过事务和排序来解决。
你有没有在实践中尝试过这个?这是个坏主意吗?
答案 0 :(得分:1)
嗯,这是If-Match的设计之一,是的,这是按设计工作的。