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