GET
を呼び出してユーザーのリストを取得したいとしますapi/users
が、現在、テーブルが切り詰められているため、ユーザーはいません。このシナリオに対する適切な応答は何ですか:404
または204
?
5 に答える
どちらとも言えません。
404 (Not Found) ではないのはなぜですか?
404 ステータス コードは、リソースが見つからない状況のために予約する必要があります。この場合、リソースはusers のコレクションです。このコレクションは存在しますが、現在空です。個人的には、あなたのアプリケーションのクライアントの作成者として、誰かがたまたま数人のユーザーを削除したという理由だけで200
、ある日と次の日があったとしたら、私は非常に混乱するでしょう。404
私はどうしたらいいですか?私のURLは間違っていますか?誰かが API を変更し、リダイレクトを放置しませんでしたか。
204 (コンテンツなし) ではないのはなぜですか?
w3cによる204ステータスコードの説明からの抜粋です
サーバーは要求を満たしましたが、エンティティ本体を返す必要はなく、更新されたメタ情報を返したい場合があります。
この場合、これは妥当に思えるかもしれませんが、クライアントを混乱させることにもなると思います。A204
は、何らかの操作が正常に実行され、データを返す必要がないことを示すと想定されています。これは、DELETE
リクエストへの応答として、またはおそらくデータを返す必要のないスクリプトを起動するのに最適です。の場合api/users
、通常、ユーザーのコレクションの表現を受け取ることを期待します。応答本文を 1 回送信して、別の時間には送信しないことは、一貫性がなく、誤解を招く可能性があります。
200 (OK) を使用する理由
上記の理由 (一貫性) により、空のコレクションの表現を返します。XML を使用していると仮定しましょう。空でないユーザーのコレクションに対する通常の応答本文は、次のようになります。
<users>
<user>
<id>1</id>
<name>Tom</name>
</user>
<user>
<id>2</id>
<name>IMB</name>
</user>
</users>
リストが空の場合は、次のように応答できます (まだ a を使用しています200
):
<users/>
どちらの方法でも、クライアントは特定の既知の形式に従う応答本文を受け取ります。不必要な混乱やステータス コードのチェックはありません。また、ステータス コードの定義に違反していません。みんな幸せです。
JSON、HTML、または使用している任意の形式で同じことができます。