GET
を呼び出してユーザーのリストを取得したいapi/users
が、現在テーブルが切り捨てられているためユーザーがいないとします。このシナリオの適切な応答は ですか、404
それとも ですか204
?
ベストアンサー1
どちらでもないと思います。
なぜ 404 (見つかりません) ではないのですか?
404ステータスコードは、リソースが見つからない状況のために予約されています。この場合、リソースはユーザーの集合200
このコレクションは存在しますが、現在は空です。個人的には、誰かがたまたま数人のユーザーを削除したために、ある日は が、次の日にはが返されたら、アプリケーションのクライアントの作成者としては404
非常に困惑するでしょう。どうすればいいのでしょうか? URL が間違っているのでしょうか? 誰かが API を変更して、リダイレクトを残すのを忘れたのでしょうか。
なぜ 204 (コンテンツなし) ではないのですか?
以下は抜粋ですW3Cによる204ステータスコードの説明
サーバーはリクエストを満たしましたが、エンティティ本体を返す必要はなく、更新されたメタ情報を返す必要がある場合があります。
この場合はこれが妥当に思えるかもしれませんが、クライアントを混乱させる可能性もあると思います。 は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 など、使用している形式でも同じことができます。