親リソースが見つからない場合、POSTに対する適切な応答ステータスコードは何ですか?


10

私は次のエンドポイントを持っています:

a/{id}/b

b送信POSTリクエストを含むを作成します。もしa与えられたもの{id}が見つからない場合、私は、404 NOT_FOUNDまたは多分で応答すべき409 CONFLICTですか?

それはplainを処理することでありa/{id}、トリックはここでサブリソースが使用されることです。


回答:


15

404 NOT FOUNDこのIDのリソースが存在しないため、適切な応答のようです。理解することは非常に明確であり、a/{id}が呼び出された場合も同じ応答を期待しています。

409 CONFLICTあなたの例では親リソースが見つからなかったときに409を返すので、私には良い選択ではないようです:)。

しかし、最も重要なことはAPIで一貫していることを覚えています


同意する。存在しないフォルダに書き込もうとした場合、それは競合ですか、フォルダが見つからないというエラーですか?私にとっては、この方法のほうが直感的です。
Neil

「フォルダ」とは、存在しないパスのことですか?
Dherik、2018年

ファイルシステムのようなフォルダーを意味します。
Neil

シナリオの詳細を教えてください。場合によります。フォルダーがサーバーで予期されていて、(何らかの理由で)存在しない場合、これはサーバーエラー(5xx)ではなくクライアントエラー(4xx)であると思います。このフォルダーの値がクライアントからリソースに渡された場合(としてid)は404です。ただし、フォルダーが本文で渡された場合、これは他の何でもかまいません(412、422 ... "検証に失敗しました:フォルダーは存在しない")。質問して話し合うのは良い質問です。
Dherik、2018年

パス/nonexistent/help.htmlのファイルをサーバーに要求し、フォルダー/ nonexistentが存在しない場合、これに対する明確な応答は1つだけです。404ファイルが見つかりません!/home/help.htmlも存在する可能性があり、応答は変わりません。これは明らかにRESTアプリケーションですが、ロジックが変更される理由はわかりません。親が最初に存在する必要があります。
Neil

4

@Dherikの答えに加えて。

URIは識別子なので、(/a/{id}/bは識別子)を覚えておく必要があります。URIは、 WWWのために意味がない、ので、HTTPクライアントのためです。

404が正解です。本質的に、サーバーは応答しています

そのようなIDのリソースは見つかりませんでした。リソースが見つかりません 1

欠落しているリソースがかは問題ではありません。

開発者は、URIに階層とパスを表示しますが、HTTPクライアントは表示しません。つまり、HTTPはHTTPクライアントによってのみ解釈されることを意図されており、人間(開発者、エンドユーザーなど)によって解釈されることはありません。

疑問がある場合は、あなた(人間)にとって意味のあるコードを尋ねないでください。質問してください。HTTPクライアントにとって意味のあるコードは何ですか。HTTPクライアントをどのように動作させますか?

どうして?一部のステータスコードにより、これらのクライアントは特定の操作を実行するためです。たとえば、302。通常、このコードにより、Webブラウザーは応答ヘッダーで通知された特定の場所(URI)にリダイレクトします。

これはあなたのケースではないかもしれませんが、注意することが重要です。最終的に、HTTPステータスコードはHTTPクライアントに送信されます。私たちのアプリケーションではありません。人にではない。


1:409がナビゲーションエラーとして実装されることはほとんどありません。通常、リモート操作(削除、更新、新規など)の実行が含まれます。しかし、URIは存在するはずです。それ以外の場合は、404が優先されます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.