我正在开发一个REST API。
如果进行POST以创建资源时缺少必需字段,应该返回什么?
400 - 错误请求
还是
412 - 先决条件失败
为什么?
我正在开发一个REST API。
如果进行POST以创建资源时缺少必需字段,应该返回什么?
400 - 错误请求
还是
412 - 先决条件失败
为什么?
如果请求的参数错误,则使用400。如果请求中的某个If-*
头部(例如If-Match
、If-Modified-Since
等)错误,则使用412。
为什么?这就是RFC规范要求的。例如,参见此处关于If-Match
规范的摘录:
如果没有任何实体标签匹配,或者给定了“*”,但当前没有实体存在,则服务器不得执行请求的方法,并必须返回412(先决条件失败)响应。当客户端希望防止更新方法(如PUT)修改自上次检索以来已更改的资源时,此行为最有用。
当服务器不符合客户端指定的条件时,使用412错误码。
在本例中,应该使用400错误码,表示请求无效。
关于前置条件标头的解释,请参考此链接。
Etag标头通常是表示HTTP标头中我们资源的字符串。如果您使用If-Match来请求资源,则这是一个预先条件的HTTP标头。如果不匹配您发送的代码,则会返回412错误码。
If-None-Match告诉服务器仅在与客户端发送的Etag不同的情况下处理整个响应。