次の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
はおそらくより良いオプションでしょうか?
404が最良の応答です。 HTTP RFC http://www.ietf.org/rfc/rfc2616.txt によると、400 Bad Requestは以下を意味します:
不正な構文のため、サーバーはリクエストを理解できませんでした。
一方、404は次のように述べています。
サーバーは、Request-URIに一致するものを検出しませんでした。
URI全体がリソース識別子であり、その特定の識別子に一致するリソースが見つかりません。
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.