8

我通过将 GET 中的版本号传回给 PUT 调用,为我的 REST 资源实现了乐观锁定,这些资源具有与数据库表的一对一映射。如果在我执行 GET 和 PUT 之间数据库中的版本号发生了变化,那么就发生了乐观锁异常。很简单的设计。

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

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

4

1 回答 1

5

这就是ETag 标头的设计目的。实现它的一种非常常见的方法是生成响应负载,对其进行哈希处理(它不必是安全的,只是低冲突),然后使用该哈希作为 ETag 的值。请注意,这种方法不知道有多少来源参与产生响应。

然后,客户端将收到的ETagIf-Match标头中发回,服务器可以使用该标头检查请求的新鲜度。

于 2013-02-04T15:50:33.447 回答