[解決済み] 空のテーブルに対する適切なRESTレスポンス?
質問
を呼び出して、ユーザのリストを取得したいとします。
GET
を
api/users
に変更しましたが、現在テーブルが切り捨てられたため、ユーザーは存在しません。このシナリオの適切な応答は何ですか。
404
または
204
?
どのように解決するのですか?
どちらとも言えません。
なぜ404(Not Found)ではないのですか?
404 ステータスコードは、リソースが見つからない状況のために確保されるべきです。この場合、あなたのリソースは
ユーザーのコレクション
. このコレクションは存在しますが、現在は空です。個人的には、あなたのアプリケーションのクライアントの作者として、もし私が
200
を受け取ったのに、ある日
404
が表示され、次の日には誰かがユーザーを数人削除しただけで表示されます。私はどうしたらいいのでしょうか?私のURLは間違っているのでしょうか?誰かがAPIを変更し、リダイレクトを残すのを怠ったのでしょうか。
204 (No Content)ではないのですか?
からの抜粋です。 w3c による 204 ステータス コードの説明です。
サーバーはリクエストを満たしましたが、エンティティボディを返す必要はなく、更新されたメタ情報を返したいと思っている可能性があります。
この場合、合理的に見えるかもしれませんが、クライアントを混乱させることにもなると思います。A
204
は、ある操作が正常に実行され、データを返す必要がないことを示すことになっています。への応答としては完璧です。
DELETE
リクエストに対する応答として、あるいはデータを返す必要のないスクリプトを実行する際に最適です。の場合は
api/users
の場合、通常はユーザーのコレクションを受け取ることを期待します。あるときはレスポンス ボディを送信し、別のときは送信しないというのは、一貫性がなく、誤解を招く可能性があります。
200 (OK) を使用する理由
上記の理由(一貫性)により、私なら空のコレクションの表現を返します。XML を使用していると仮定しましょう。ユーザーの空でないコレクションに対する通常のレスポンスボディは、次のようになります。
<users>
<user>
<id>1</id>
<name>Tom</name>
</user>
<user>
<id>2</id>
<name>IMB</name>
</user>
</users>
で、リストが空の場合は、このようなもので対応すればよいでしょう(ただし
200
):
<users/>
いずれにせよ、クライアントは特定のよく知られた形式に従ったレスポンスボディを受け取ります。不必要な混乱やステータスコードのチェックはありません。また、ステータスコードの定義に違反することもありません。誰もがハッピーになれます。
JSONでもHTMLでも、どんなフォーマットでも同じことができます。
関連
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] URI、URL、URNの違いは何ですか?
-
[解決済み] カスタムHTTPヘッダー:命名規則
-
[解決済み] SOAPとRESTの比較(相違点)
-
[解決済み] リソースが既に存在する場合の POST に対する HTTP レスポンスコード
-
[解決済み] 検証失敗または重複が無効な場合のREST HTTPステータスコード
-
[解決済み】REST APIでのPUTメソッドとPATCHメソッドの使い分け 実生活でのシナリオ
-
[解決済み] [Solved] リクエストに必須パラメータがない場合、どのようなHTTPステータスレスポンスコードを使用すればよいですか?
-
[解決済み】有効なリクエストでありながら、データが空の場合の適切なRESTレスポンスコードは何ですか?
-
[解決済み】HTTP 1.0 vs 1.1
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HTTPヘッダーの最大値?
-
[解決済み】全てのブラウザで、Webページのキャッシュを制御するには?
-
[解決済み】有効なリクエストでありながら、データが空の場合の適切なRESTレスポンスコードは何ですか?
-
[解決済み】HTTP 1.0 vs 1.1
-
[解決済み】GETリクエストで同じパラメータ名で複数の値を渡す場合の正しい方法
-
[解決済み】http getリクエストにヘッダーを設定する方法は?
-
[解決済み】「HTTPはステートレスプロトコルである」と言われているのはなぜですか?
-
[解決済み】HTTP1.1とHTTP2.0の違いは何ですか?[クローズド]
-
[解決済み] HTTP GETリクエストにcontent-typeヘッダーは必要ですか?
-
[解決済み] HTTPのPOSTメソッドをキャッシュすることは可能ですか?