REST API 中的并发控制

Concurrency control in REST APIs

REST API 是否应该实施并发控制以控制对资源的几乎同时修改?

例如,想象一个类似于 Wiki 的应用程序,用户可以在其中阅读、撰写和编辑文章。现在假设用户 Bob 和用户 Mary 在同一时间修改同一篇文章,但是 Bob 更新文章的速度比 Mary 快,并且提交了他的更改。当 Mary 提交她的更改时,她会覆盖 Bob 的更改。这对 Bob 来说是个坏消息,因为他的更改丢失了。

避免这种情况的最佳方法是什么?这通常使用什么技术?

What would be the best way to avoid this situation? What techniques are usually used for this?

一般情况下,conditional requests

简短版:您结合 validators with precondition headers to ensure "first writer wins" semantics. The unsafe request to a resource includes a reference to the expected version. If the resource isn't on that expected version when your request is handled, you get a 412 Precondition Failed 响应,然后选择适当的补救措施。

专门针对共享创作场景,就像您描述的那样?您可能想查看无冲突复制数据类型 (CRDT)。 Kleppmann 博士的演讲非常平易近人:您可以从 Goto 2016 的这个开始;或查找他的书 设计数据密集型应用程序