如何在REST中实现粗粒度乐观锁?

Bes*_*ces 8 java rest optimistic-locking

我已经为我的REST资源实现了乐观锁定,这些资源通过将GET中的版本号传回PUT调用,与数据库表进行一对一映射.如果在我执行GET和PUT之间数据库中的版本号发生了更改,则会发生乐观锁定异常.很简单的设计.

现在,如何对映射到多个数据库表的复合REST资源执行相同的操作?我不想传回多个版本字段(每个数据表对应一个复合资源).复合资源的简单示例是/ FooBar,其中/ Foo和/ Bar是非复合资源.

我基本上是在寻找Fowler的粗粒度锁定模式的REST实现示例:http://martinfowler.com/eaaCatalog/coarseGrainedLock.html

fum*_*chu 5

这就是ETag标头的设计目的.实现它的一种非常常见的方法是生成响应有效负载,对其进行散列(它不必是安全的,只是低冲突),然后使用该散列作为ETag的值.请注意,此方法不知道生成响应涉及多少源.

然后,客户端将接收到的ETag发送回If-Match标头,服务器可以使用该标头检查请求的新鲜度.