简体   繁体   中英

Http Status Code 400 vs 412

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?

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.

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.

您可以使用状态代码422.如果您不想,400就可以了。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM