8

GETにあったバージョン番号をPUT呼び出しに戻すことにより、データベーステーブルに1対1でマッピングするRESTリソースに楽観的ロックを実装しました。GETとPUTの間にデータベースでバージョン番号が変更された場合は、楽観的なロック例外が発生しています。かなりシンプルなデザイン。

では、複数のデータベーステーブルにマップする複合RESTリソースに対して同じことを行うにはどうすればよいですか?複数のバージョンフィールド(複合リソースに関連するデータテーブルごとに1つ)を返す必要はありません。複合リソースの単純な例は/FooBarで、/Fooと/Barは非複合リソースです。

私は基本的に、ファウラーの粗視化ロックパターンのREST実装の例を探しています:http://martinfowler.com/eaaCatalog/coarseGrainedLock.html

4

1 に答える 1

5

これは、ETag ヘッダーが設計された目的です。これを実装するための非常に一般的な方法は、応答ペイロードを生成し、そのハッシュを作成し (安全である必要はなく、衝突が少ないだけです)、そのハッシュを ETag の値として使用することです。このアプローチは、応答の生成に関与するソースの数を無視することに注意してください。

次に、クライアントは受信したETagをIf-Matchヘッダーで送り返します。サーバーはこれを使用して、要求の鮮度を確認できます。

于 2013-02-04T15:50:33.447 に答える