3

これは、私を悩ませてきた何かの概念的な完全性の問題です。

HTTP の DELETE メソッドはべき等であると想定されており、REST の URI は実際に物事を表すと想定されています。しかし、それは逆方向にのみ定義されているようです: 各リソースには 1 つの URI が必要ですが、特定の URI にはリソースが必要ないようです。もっと慈善的には、空/ヌルのリソースを指すように URI を定義できると思います。

これが実際に関連していると思われるのは、DELETE 要求の場合だけです。どこに置くのがベスト?example.com/users/削除するリソースを識別するコンテンツを使用するか、それともexample.com/users/USERNAME優れていますか?

DELETE のコンテンツは、HTTP と REST で問題ないようです。(概念的に: 他の SO の質問によると、さまざまなフレームワークは、処理する前に DELETE 要求からコンテンツを静かに削除します。)

だからここに私の考えがあります:すべての例は後者のスキームを使用しているようです-親コレクションのURIからリソースを削除するのではなく、そのURIでリソースを削除しています- しかし、DELETEが成功した後、リソースは存在しなくなります。その場合、URI は大声で失敗するはずです。しかし、それでは DELETE の冪等性が無効になるため、削除する実際のリソースを指定するコンテンツを使用して、DELETE はコレクションに対して操作する必要があると考えるようになりました。

明らかに、誰もが私が好きではないことをしているだけであり、おそらくユーザーの正気のためにそれに同意する必要がありますが、これが明確に説明されている場所、または私が見逃している明らかなことが間違いを犯している場所はありますか? ?

4

2 に答える 2

4

HTTP標準によると、「DELETEメソッドは、オリジンサーバーがRequest-URIで識別されるリソースを削除することを要求します。」-リクエストの本文については何もありません。

その場合、URIは大声で失敗するはずです、imho。しかし、それはDELETEのべき等性を否定します

404を返すだけです。べき等のポイントは、同じDELETE要求を2回送信しても、サーバーの状態が1回送信した場合と異なることはないということです。失敗しても問題は発生しません(サーバーがシャットダウンするなどの場合を除く)

于 2011-10-12T19:57:33.627 に答える
1

DELETEリクエストは、削除するリソースのURIにのみ適用する必要があります。コレクションを介して何かを削除するには、POSTまたはPUTそのコレクションへのがより適切です。

DELETEリソースをチェックし、リソースが存在する場合は削除して2xxを返すことで、リクエストへの応答を実装できます。それ以外の場合は、2xxを返します(たとえば、重複したリクエストが送信された場合)。メソッドをべき等にすることのポイントは、「大声で失敗」しないことです。失敗とはまったく見なされません。PUT「作成」と「更新」を区別しないのと同じように。

于 2011-10-12T20:00:29.367 に答える