web-dev-qa-db-ja.com

存在するリソースのHTTPステータスコードは正しいが、エンティティは存在しませんか?

クライアントが次のURLを要求しているとします。

/user-details?user=123

/user-detailsが存在しないリソースである場合、正しいステータスコードは明らかに404になります。

ただし、/user-detailsは存在するが、IDが123のユーザーが存在しない場合:

  • これまでに404 Not Foundを返しましたが、経験上、それがリソースであるかどうかわからないのは混乱を招くと言われています。または、見つからなかったentity
  • 400 Bad Requestの使用を検討しましたが、要求が技術的に正しいため、存在しないエンティティを要求するだけなので、混乱することもあります。

この目的に適したHTTPステータスコードはありますか?

15
Benjamin

User-detailsリソースは、この場合は部分的なユーザーリソース情報へのユーザーエンティティへの概念的なマッピングであるため、404は問題ありません。

したがって、user-detailsのGETメソッドは、次の2つの場合と区別する責任を負いません。a)ユーザーが存在しない、b)ユーザーの詳細が存在しない。

ただし、エンドポイントを次のように書き直します。

/user/123/details

私の意見では、どちらがより表現力豊かです。

7
raspacorp

WebDavで使用されている422を試してみませんか? http://en.wikipedia.org/wiki/List_of_HTTP_status_codes を参照してください

私にとって、404ステータスも問題ありません(実際にはより適切に標準化されています)、400はあいまいすぎます。

4
cubitouch

userパラメータは、 RFC 3986、セクション3.4 に記載されているリソース識別子の一部です。

クエリコンポーネントには、パスコンポーネント(セクション3.3)のデータとともに、URIのスキームと命名機関のスコープ内のリソースを識別するのに役立つ非階層データが含まれています

したがって、404/Not foundは完全に問題ありません。

4
DaSourcerer