是否应为无效数据返回HTTP 422(不可处理实体)? 问题

是否应为无效数据返回HTTP 422(不可处理实体)? 问题,http,http-headers,Http,Http Headers,对于语义正确(w.r.t.结构和类型)但服务器认为无效的数据,是否应返回422 权威参考 从: 422(不可处理实体)状态代码表示服务器 了解请求实体的内容类型(因此 415(不支持的媒体类型)状态代码不合适),并且 请求实体的语法正确(因此是400(错误请求) 状态代码不合适),但无法处理包含的 说明书例如,如果XML 请求主体包含格式良好的(即语法正确的),但 语义错误的XML指令 具体例子 格式错误的请求 如果端点需要JSON,则语法无效的JSON应作为HTTP 400错误请求被拒绝 {

对于语义正确(w.r.t.结构和类型)但服务器认为无效的数据,是否应返回422

权威参考 从:

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

具体例子 格式错误的请求 如果端点需要JSON,则语法无效的JSON应作为HTTP 400错误请求被拒绝

{
    segments: [1, 2   // Missing closing bracket
}
格式错误的模式 如果端点期望出现特定的指令或属性,但请求无法满足端点的模式,我相信这将属于HTTP 422不可处理实体,作为无法理解的“指令”

{
    selectedSegments: [1, 2]   // Endpoint expects the attribute 'segments'
}
无效数据(有问题的项目) 如果端点接收到预期模式下的数据,然后发现该模式中包含的数据无效,我认为这构成了HTTP 200 OK响应,与验证错误相关的信息作为响应体传递。问题是这个假设是否正确。

{
    segments: [1, 2]   // It is invalid to simultaneously select these particular segments, as determined by the server on request resolution
}

至少可以说,REST响应的HTTP状态代码选择是模糊的。它没有严格的定义。最肯定的是,如果是错误,您不会返回2xx,因此422看起来是最合适的。如果将HTTP作为应用程序协议,那么“无效数据”响应不能被视为对请求的成功响应吗?它感觉更符合大多数现有HTTP代码处理请求的实际数据的方式,而不是请求的结构。回答“好的,但我不打算那样做”是没有意义的,这是有意义的。我想我需要调整一下HTTP与服务器端应用程序的关系。要用该响应创建答案吗?不,对不起,我在移动电话上。自由地自我回答。