私は次のエンドポイントを持っています:
a/{id}/b
b
リクエストを送信してPOST
を作成したい。指定された{id}
を含むa
が見つからない場合、404 NOT_FOUND
または409 CONFLICT
で応答する必要がありますか?
それは単純なa/{id}
を処理することです。ここでの秘訣は、ここでサブリソースが使用されることです。
404 NOT FOUND
このIDのリソースが存在しないため、適切な応答のようです。理解することは非常に明確であり、a/{id}
が呼び出されます。
409 CONFLICT
親リソースがnot found :)だった場合に409が返されるため、私には適切な選択ではないようです。
しかし、最も重要なことはAPIで一貫していることを覚えています
@Dherikの答えに加えて。
URIは識別子であるため、(/a/{id}/b
は識別子です)。 [〜#〜] uri [〜#〜] はWWWでは意味がなく、HTTPクライアントでも意味がありません。
404 が正しい答えです。本質的に、サーバーは応答しています
そのようなIDのリソースは見つかりませんでした。 リソースが見つかりません 1
不足しているリソースがparentであるかchildであるかは関係ありません。
開発者は、URIで階層と paths を確認できますが、HTTPクライアントでは確認できません。言い換えれば、HTTPは人間(開発者、エンドユーザーなど)によってではなく、HTTPクライアントによってのみ解釈されることを意図しています。
疑問がある場合は、あなた(人間)にとって意味のあるコードを尋ねないでください。質問してください。HTTPクライアントにとって意味のあるコードは何ですか。 HTTPクライアントをどのように動作させますか?
どうして?一部のステータスコードにより、これらのクライアントは特定の操作を実行するためです。たとえば、2のようになります。通常、このコードにより、Webブラウザーは応答ヘッダーで通知される特定の場所(URI)にリダイレクトします。
これはあなたのケースではないかもしれませんが、注意することが重要です。最終的に、HTTPステータスコードはHTTPクライアントに送信されます。私たちのアプリケーションではありません。人にではありません。
1:409は、ナビゲーションエラーとして実装されることはほとんどありません。通常、リモート操作(削除、更新、新規など)の実行が含まれます。しかし、URIは存在するはずです。それ以外の場合は、404が優先されます