我已经为我的REST资源实现了乐观锁定,通过将GET中的版本号传回PUT调用,该资源具有与数据库表的一对一映射。如果在我执行GET和PUT之间数据库中的版本号发生了更改,则会发生乐观锁定异常。很简单的设计。
现在,如何对映射到多个数据库表的复合REST资源执行相同的操作?我不想传回多个版本字段(每个数据表对应一个复合资源)。复合资源的简单示例是/ FooBar,其中/ Foo和/ Bar是非复合资源。
我基本上是在寻找Fowler的粗粒度锁定模式的REST实现示例:http://martinfowler.com/eaaCatalog/coarseGrainedLock.html
答案 0 :(得分:5)
这就是ETag header的设计目标。实现它的一种非常常见的方法是生成响应有效负载,对其进行散列(它不必是安全的,只是低冲突),然后使用该散列作为ETag的值。请注意,这种方法不知道产生响应涉及多少来源。