Pregunta

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?

¿Fue útil?

Solución

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.

Otros consejos

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.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top