1. ホーム
  2. rest

[解決済み] RESTを使った複数レコードの削除

2022-05-12 15:54:10

質問

複数のアイテムを削除するためのREST-fulな方法は何ですか?

私のユースケースは、私が一度に複数のアイテムを削除することができる必要があるBackboneコレクションを持っていることです。オプションは次のようになります。

  1. すべてのシングルレコードのDELETEリクエストを送信する(これは、潜在的に数十の項目がある場合、悪い考えのように思われます)。
  2. 削除する ID を URL につなぎ合わせた DELETE を送信します (例: "/records/1;2;3")。
  3. REST ではない方法で、削除するためにマークされた ID を含むカスタム JSON オブジェクトを送信します。

すべてのオプションは理想的ではありません。

これはRESTの規約のグレーゾーンのような気がします。

どのように解決するのですか?

  1. は実行可能な RESTful な選択肢ですが、明らかにあなたが説明したような制限があります。
  2. これはやめましょう。にある(単一の)リソースをDELETEする」という意味だと仲介者によって解釈されるでしょう。 /records/1;2;3 " - つまり、これに対する 2xx レスポンスは、キャッシュをパージするために /records/1;2;3 ; ではなく パージ /records/1 , /records/2 または /records/3 に対する 410 レスポンスをプロキシします。 /records/1;2;3 など、あなたの視点からは意味のないものです。
  3. この選択が最善である。 であり、RESTful に行うことができます。API を作成していて、リソースへの大量の変更を許可したい場合、REST を使用してそれを行うことができますが、正確にどのように行うかは多くの人にとってすぐにわかるものではありません。1つの方法として 変更要求'リソースを作成する (のようなボディを POST することで)。 records=[1,2,3]/delete-requests で指定される)作成されたリソースをポーリングします。 Location ヘッダで指定されます) をポーリングして、 リクエストが受け入れられたか、拒否されたか、進行中か、終了したかを調べます。これは長時間実行される操作に便利です。別の方法として を送ることです。 PATCH リクエストをリストリソースに送る , /records へのリクエストで、そのボディはリソースのリストとそれらのリソースで実行するアクションを含んでいます (サポートしたい形式は何でもかまいません)。これは、リクエストに対するレスポンスコードが操作の結果を示すことができるような素早い操作に便利です。

RESTの制約を守りながらすべてを達成することができ、通常、答えは「問題」をリソースにし、それにURLを与えることです。

つまり、ここでの削除、リストへの複数のアイテムのPOST、一連のリソースへの同じ編集などのバッチ操作はすべて、quot;バッチ操作リストを作成し、新しい操作をそこにPOSTすることによって処理できます。

忘れてはならないのは、RESTはどんな問題を解決するための唯一の方法ではないということです。「REST」は単なるアーキテクチャーのスタイルであって を持つ を遵守する必要はありません(ただし、遵守しなければ、インターネットの特定の利点を失うことになります)。私は、この HTTP API アーキテクチャ の一覧を見て、自分に合ったものを選ぶことをお勧めします。他のアーキテクチャを選択した場合に何が失われるかを認識し、ユースケースに基づいて十分な情報を得た上で決断してください。

この質問に対する悪い回答が REST Webサービスでバッチ操作を処理するためのパターン? には、あまりに多くのupvoteがありますが、これも読むべきでしょう。