129

GETを呼び出してユーザーのリストを取得したいとしますapi/usersが、現在、テーブルが切り詰められているため、ユーザーはいません。このシナリオに対する適切な応答は何ですか:404または204?

4

5 に答える 5

266

どちらとも言えません。

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、または使用している任意の形式で同じことができます。

于 2012-11-13T19:14:54.370 に答える