web-dev-qa-db-ja.com

404が見つからないか、リクエストが不適切ですか?

次のREST呼び出しがあるとします:

GET api/companies/5 

(id 5の会社を取得)

会社「5」が存在しない場合、通常は404 Not Found応答を返します。

しかし、今、この呼び出しを取ってみましょう:

GET api/companies/5/invoices/10 

(会社5から請求書10を取得)

ここで、会社「5」が存在しない場合でも、404 Not Foundを返しますか?または、最も外側のリソースが見つからない場合にのみ404を返す必要があります(この場合、請求書10)。

Bad Requestはおそらくより良いオプションでしょうか?

24
Dave New

404が最良の応答です。 HTTP RFC http://www.ietf.org/rfc/rfc2616.txt によると、400 Bad Requestは以下を意味します:

不正な構文のため、サーバーはリクエストを理解できませんでした。

一方、404は次のように述べています。

サーバーは、Request-URIに一致するものを検出しませんでした。

URI全体がリソース識別子であり、その特定の識別子に一致するリソースが見つかりません。

29
Josh Rack

404は混乱の原因となる可能性があります-リソースが不足しているか、実際のURLが間違っていますか?

個人的には422コード:

   The 422 (Unprocessable Entity) status code means the server
   understands the content type of the request entity (hence a
   415(Unsupported Media Type) status code is inappropriate), and the
   syntax of the request entity is correct (thus a 400 (Bad Request)
   status code is inappropriate) but was unable to process the contained
   instructions.  For example, this error condition may occur if an XML
   request body contains well-formed (i.e., syntactically correct), but
   semantically erroneous, XML instructions.
0