web-dev-qa-db-ja.com

結果がnullの場合は404または200を使用(REST)

エンティティがあるとしましょう

{
    "id": 1
    "inProgress": true,
}

エンドポイントがあります:

  • /api/v1/entities/すべてのエンティティを取得するため、
  • /api/v1/entities/1は、id = 1のエンティティを取得します
  • /api/v1/entities/in-progressは、進行中のエンティティを取得します。進行中のエンティティは1つだけであることに注意してください。

現在、/api/v1/entities/in-progressには2つの状況があります。

  1. 進行中のエンティティがあります
  2. 現在進行中のエンティティはありません

2番目のケースではどのステータスコードが返されますか?

404-見つかりません

エンティティがないため、問題ありません。また、404の場合、HTTPはThe requested resource could not be found but may be available again in the future. Subsequent requests by the client are permissible.と表示します

2

リクエストは成功したので問題ないように見えますが、なぜnull結果を返す必要があるのでしょうか。

204

リクエストは成功しましたが、結果はありません。これも問題ないようです。

使用するステータスコードとその理由は何ですか。

9
Maxian Nicu

4xxの範囲のHTTPステータスコードは、クライアントエラーを示します。したがって、404を使用することはここでは適用できないと思います。これをクライアントエラーと見なした場合、クライアントはサーバーの状態に関する知識を持っている必要があり、これは高度に結合された設計を示します。

JimmyJamesがコメントにうまく書いているので、

404は、「何を指しているのかわからない」という意味です。これは、「あなたが何を求めているのかは正確にわかっていますが、データがありません」とは大きく異なります。

しかし、どの時点でも進行中のエンティティは1つだけであると言います。これはビジネスルールのように聞こえ、URLで1つのオブジェクトのみを返すことにした場合、インターフェイスはビジネスルールを反映します。

in-progress URLから配列を返すことを検討することをお勧めします。その後、偶然にも、結果が0または1の配列を取得できます。

おそらくこれをクエリに変更して、/api/v1/entities?in-progress=true

23
Pete