HTTPは2つのプロパティを区別します。
べき等は、仕様によって次のように定義されます。
メソッドは、「べき等」のプロパティを持つこともできます(エラーまたは期限切れの問題は別として)N> 0の同一リクエストの副作用は単一リクエストの場合と同じです。方法はGET
、HEAD
、PUT
およびDELETE
このプロパティを共有しています。また、メソッドOPTIONS
と副作用があるTRACE
べきではないので、本質的にべき等です。
そして安全性:
特に、GET
とHEAD
メソッドには、取得以外のアクションを実行することの重要性がないという規約が確立されています。これらの方法は「安全」であると考えられるべきです。これは、ユーザエージェントのような他の方法を、表現することができPOST
、PUT
そしてDELETE
ユーザは、おそらく危険なアクションが要求されているという事実を認識させられるように、特別な方法で、。
当然、GET
リクエストを実行した結果としてサーバーが副作用を生成しないようにすることはできません。実際、一部の動的リソースはその機能を考慮しています。ここでの重要な違いは、ユーザーが副作用を要求しなかったため、それらに対して責任を負うことができないことです。
安全性はべき等を意味することに注意してください。メソッドに副作用がない場合、メソッドを複数回実行すると、それを1回実行した場合と同じ副作用、つまりなしになります。
これにより、メソッドは3つのカテゴリに分類されます。
- 安全な(これもとべき等): 、
GET
、、HEAD
OPTION
TRACE
- べき等であるが必ずしも安全ではない:
PUT
、DELETE
- べき等でも安全でもない:
POST
PUTは副作用がない必要があります。
それは間違いです。PUT
べき等ですが安全ではありません。の要点はPUT
、副作用、つまりリソースの更新を行うことです。べき等性とは、同じリソースを同じ内容で複数回更新すると、1回だけ更新するのと同じ効果が得られるということです。
安全性に関するセクションの最後の段落に注意してください(強調は私のものです):
当然、GET
リクエストを実行した結果としてサーバーが副作用を生成しないようにすることはできません。実際、一部の動的リソースはその機能を考慮しています。ここでの重要な違いは、ユーザーが副作用を要求しなかったため、それらに対して責任を負うことができないことです。
この文はGET
安全性について述べていますが、著者も同じ推論とべきPUT
等性を適用するつもりであったと考えられます。IOW:ユーザーに見える副作用、つまり名前付きリソースの更新がPUT
1つだけあるはずです。それはあり、他の副作用を持っていますが、ユーザーは、彼らのために責任を負うことはできません。
たとえば、べき等であることは、何度でもPUT
再試行できることを意味します。仕様では、複数回実行すると1回実行する場合とまったく同じになることが保証されています。これらの複数のPUT
リクエストの副作用として、古いリビジョンのバックログを作成することは完全に有効です。ただし、複数回の再試行の結果、データベースが古いリビジョンのバックログで一杯になった場合、それは私の問題ではありません。
IOW:副作用はいくつでも許されますが、
- ユーザーの要求がべき等であるかのようにユーザーに見える必要があります
- ユーザーではなく、これらの副作用に責任があります