web-dev-qa-db-ja.com

HTTPステータスコード400と412

Rest APIを開発しています

POSTがリソースを作成するために作成され、必須フィールドが欠落している場合、何を返す必要がありますか?

400不正な要求

OR

412-前提条件が失敗しました

なぜ?

27
adamclerk

リクエストパラメータが間違っている場合は400を使用します。 If-*リクエストheadersのいずれかが If-MatchIf-Modified-Since などが間違っています。

どうして?それはRFCが言うだけです。たとえば、この If-Match 仕様の抜粋を参照してください。

どのエンティティタグも一致しない場合、または "*"が指定されていて現在のエンティティが存在しない場合、サーバーは要求されたメソッドを実行してはならず(MUST NOT)、412(Precondition Failed)応答を返す必要があります。この動作は、クライアントが最後にリソースを取得してから変更されたリソースをPUTなどの更新メソッドが変更できないようにする場合に最も役立ちます。

35
BalusC

412は、サーバーがクライアントによって指定された条件を満たさない場合に使用されます。

あなたの場合、400を使用する必要があります。これは単に悪い要求です。

前提条件ヘッダーの説明については、この link を参照してください。

Etagヘッダーは、通常、HTTPヘッダーでリソースを表す文字列です。 If-Matchが前提条件のHTTPヘッダーであるリソースを要求します。送信したコードと一致しない場合は、412を送信します。

If-None-Matchは、Etagがクライアントから送信されたものと異なる場合にのみ、サーバーに応答全体を処理するように指示します。

16
nunespascal

ステータスコード422を使用できます。使用したくない場合は、400で問題ありません。

4
Julian Reschke