次のように、会社の名前を変更する API を実装しました。
PUT /companies/A
{
"name": "B"
}
会社の新しい URI: を指すヘッダーで返さHTTP 301
れます。Location
/companies/B
If-Match
ヘッダーの有無にかかわらず、この操作を冪等にするにはどうすればよいですか?
ヘッダーなし
If-Match
: ユーザーが存在しない会社の名前を変更しようとすると、サーバーが返されることを期待しますがHTTP 404
、正当な名前変更操作はべき等ではないため、そうすることができません (最初に返さ301
れ、最初に返され、404
後続の呼び出しで)。失敗した名前変更 (会社が存在しない) と既に行われた名前変更をクライアントが区別できるようにしたいので、これは問題です。If-Match
ヘッダーあり: 会社が会社名に依存している場合、ETag
前提条件が成り立たなくなるため、その後の名前変更操作は失敗します。繰り返しますが、これにより、実際には既に実行されている操作が失敗したように見えます。