所以我正在开发一个Rest API
当创建一个POST来创建资源并且缺少必填字段时我应该返回什么?
400 - 错误请求
OR
412 - 前提条件失败
为什么?
答案 0 :(得分:35)
如果请求参数错误,请使用400。如果其中一个If-*
请求标题(如If-Match
,If-Modified-Since
等)错误,请使用412.
为什么呢?这正是RFC所说的。例如,参见If-Match
规范的摘录:
如果没有实体标签匹配,或者如果给出“*”并且不存在当前实体,则服务器必须不执行所请求的方法,并且必须返回412(Precondition Failed)响应。当客户端想要阻止更新方法(如PUT)修改自客户端上次检索它以来已更改的资源时,此行为最有用。
答案 1 :(得分:16)
412。
在你的情况下,你应该使用400.这只是一个糟糕的要求。
有关前置条件标题的一些说明,请参阅此link。
Etag标头通常是表示我们资源的字符串 在HTTP标头中。你要求一个If-Match是a的资源 前置HTTP标头。如果它不匹配,它将发送412 您发送的代码。
If-None-Match告诉服务器只处理完整的响应 Etag与客户发送的不同。
答案 2 :(得分:4)
您可以使用状态代码422.如果您不想,400则可以。