ユーザーとアルバムの2つのリソースがあります。ユーザーにはアルバムのリストがあります。アルバムを取得するには、2 REST API。
アルバムがないことが本当にエラーと見なされていますか?アルバムがJSON配列として返されると仮定すると、このような状況に対する一般的な応答は、本体として空の配列を持つHTTP 200です。
404を返すと、リソースが存在しないことを示します。つまり、この特定のユーザーのアルバムのリストを要求することはpossibleでもないということです。しかし、実際には、アルバムのリストを正常に返すことができます。リストが空であることだけです。それは私にはまったく例外的ではないようです。これは、(他のエンドポイントを使用して)存在しないIDを使用して特定のアルバムを取得することとはまったく対照的です。このような状況では、404が正しいです。
204は404よりも優れているように見えますが、少なくとも要求は成功したがコンテンツがなかったことをクライアントに伝えるため、「不在の成功」を示すために実際に使用することは意図されていません。むしろ、リソースは存在するが、何らかの理由でサーバーが応答本文にリソースを含めないことを選択したことを通知します。たとえば、リクエストの目的は単にヘッダーをクライアントに返すことでした。
204は、POSTリクエストが新しいリソースを作成せずにサーバーによって実行された場合(201 CREATEDを暗示する)またはリソースを返すことに関係のない他の何らかの理由で。
あなたが必要なのは
GET /user/xxx/albums
HTTP/1.1 200 OK
[]
Webサイトホスティングサーバーは通常、ユーザーが壊れたリンクまたはデッドリンクをたどろうとすると、「404 Not Found」Webページを生成します。
サーバーは要求を実行しましたが、エンティティ本体を返す必要はありません。
明らかに、204エラーを発生させる必要があります。 404を使用すると、ユーザーが邪魔される可能性があります。さらに、対象のアルバムが存在しない場合は404を使用します。 1と2の両方に404を使用するには、ロジックが不足しています。
HTTPプロトコルを定義する RFC2616 がステータスコードについて述べていることは次のとおりです。
ステータスコードの最初の桁は、応答のクラスを定義します。最後の2桁には分類の役割はありません。最初の桁には5つの値があります。
- 1xx: Informational - Request received, continuing process - 2xx: Success - The action was successfully received, understood, and accepted - 3xx: Redirection - Further action must be taken in order to complete the request - 4xx: Client Error - The request contains bad syntax or cannot be fulfilled - 5xx: Server Error - The server failed to fulfill an apparently valid request
あなたの場合、リクエストは成功しましたが、表示するアルバムがないため、2xxカテゴリのステータスを使用する必要があります。
RFCは204ステータスについて次のように述べています。
10.2.5 204コンテンツなし
サーバーは要求を実行しましたが、エンティティ本体を返す必要はなく、更新されたメタ情報を返したい場合があります。応答には、エンティティヘッダーの形式で新規または更新されたメタ情報が含まれる場合があります。これは、存在する場合、要求されたバリアントに関連付けられる必要があります。
クライアントがユーザーエージェントである場合、リクエストの送信を引き起こしたものからドキュメントビューを変更すべきではありません。この応答は、ユーザーエージェントのアクティブなドキュメントビューを変更せずにアクションの入力を許可することを主な目的としていますが、新規または更新されたメタ情報は、ユーザーエージェントのアクティブなビューに現在あるドキュメントに適用される必要があります。
204応答にはメッセージ本文を含めてはならない(MUST NOT)ため、ヘッダーフィールドの後の最初の空行で常に終了します。
RFCでは、204は主に入力を許可することを目的としているため、これを使用しないでください。この場合は200を使用します。