Http Status Code 400 vs 412
Asked Answered
H

3

34

So I'm developing a Rest API

When a POST is made to create a resource and a required field is missing what should I return?

400 - Bad Request

OR

412 - Precondition Failed

And Why?

Horseback answered 24/5, 2012 at 3:43 Comment(1)
Does this answer your question? When is it appropriate to respond with a HTTP 412 error?Rainwater
H
42

Use 400 if the request parameters are wrong. Use 412 if one of the If-* request headers like If-Match, If-Modified-Since, etc are wrong.

Why? That's just what RFC says. See for example this extract of If-Match specification:

If none of the entity tags match, or if "*" is given and no current entity exists, the server MUST NOT perform the requested method, and MUST return a 412 (Precondition Failed) response. This behavior is most useful when the client wants to prevent an updating method, such as PUT, from modifying a resource that has changed since the client last retrieved it.

Hexagon answered 24/5, 2012 at 3:50 Comment(2)
It also states the request could not be fulfilled due to malformed syntax for 400.Locksmith
This page really helped me - odino.org/… - Using 'PUT' requests for context made it easier for me to understand what it's for, as it's always easy to abuse certain status codes.Garvey
D
18

412 is used when your server does not meet a condition specified by the client.

In your case you should use a 400. It is just a bad request.

See this link for some explaination on pre-condition headers.

The Etag header is, generally, a string that represents our resource in the HTTP headers. You ask for a resource with an If-Match is a preconditional HTTP header. It will send a 412 if it does not match the code you sent.

If-None-Match tells the server to process a whole response only if the Etag is different from the one sent by the client.

Devries answered 24/5, 2012 at 3:51 Comment(1)
Think someone had a bad day. Just ignore it and let the system do its job :)Hexagon
M
5

You could use status code 422. If you don't want to, 400 is fine.

Multiply answered 21/3, 2013 at 7:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.