Http状态代码400与412

ada*_*erk 27 api rest http http-status-code-400 http-status-code-412

所以我正在开发一个Rest API

当POST创建资源并且缺少必填字段时我应该返回什么?

400 - 错误请求

要么

412 - 前提条件失败

为什么?

Bal*_*usC 35

如果请求参数错误,请使用400 .使用412,如果一个If-*请求一样If-Match,If-Modified-Since等都是错误的.

为什么?这正是RFC所说的.例如,请参阅此If-Match规范摘录:

如果没有实体标签匹配,或者如果给出"*"并且不存在当前实体,则服务器必须不执行所请求的方法,并且必须返回412(Precondition Failed)响应.当客户端想要阻止更新方法(例如PUT)修改自客户端上次检索它以来已更改的资源时,此行为最有用.


nun*_*cal 17

当您的服务器不满足客户端指定的条件时,将使用412.

在你的情况下你应该使用400.这只是一个糟糕的要求.

有关前置条件标题的一些说明,请参阅此链接.

通常,Etag标头是表示HTTP标头中的资源的字符串.您要求具有If-Match的资源是前置HTTP标头.如果它与您发送的代码不匹配,它将发送412.

If-None-Match告诉服务器仅在Etag与客户端发送的Etag不同时才处理整个响应.

  • 想想有人度过了糟糕的一天.只是忽略它,让系统完成它的工作:) (4认同)

Jul*_*hke 5

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