【问题标题】:HTTP status codes when errors in the request body请求正文中出现错误时的 HTTP 状态代码
【发布时间】:2018-09-13 20:44:22
【问题描述】:

有人可以澄清一下我应该从以下情况中获得哪些状态代码?例如,我正在发送具有这种正文格式的 POST 请求:

{
  "id": 321,
  "username": "tombrown",
  "email": "tombrown@gmail.com",
  "password": "qwerty123",
  "activated": true 
}

所以问题是:

1) 如果我指定了错误类型的数据,服务器应该返回 400,例如,“id”:“threetwoone”而不是 int,“activated”:“yes”而不是 boolean 等。或者服务器应该返回 422这里?

2) “id”值应该是 int,但实际上它是 long int,例如9223372036854774700.

3) 正文中缺少某些字段,例如我尝试发送:

{
  "id": 321,
  "username": "tombrown",
  "activated": true 
}

这些示例应该导致 400、422 还是其他一些选项?什么反应应该是正确的?

【问题讨论】:

    标签: http http-status-codes http-status-code-400 http-status-code-422


    【解决方案1】:

    如果 JSON 语法无效,则返回 400。如果 JSON语法有效,但其内容无效,则返回422,表示服务器无法处理请求实体。

    请参阅RFC 4918 中的以下引用(对于您的情况,请阅读 JSON 当它说 XML):

    11.2. 422 Unprocessable Entity

    422(不可处理实体)状态码表示服务器 理解请求实体的内容类型(因此 415(不支持的媒体类型)状态码不合适),并且 请求实体的语法是正确的(因此是 400 (Bad Request) 状态码不合适)但无法处理包含的 指示。例如,如果 XML 请求正文包含格式正确(即语法正确),但是 语义错误的 XML 指令。

    【讨论】:

    • 谢谢!是的,JSON 在语法上是有效的。基本上,我有一种情况,当错误的数据类型导致服务器出现 500 错误时,这让我有点困惑。
    • @Michael12345 据我了解,有效载荷的语法仍然有效,但服务器无法处理实体。我会坚持422
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2019-09-13
    相关资源
    最近更新 更多