什么是无效数据的适当REST响应代码? 对于无效数据,适当的REST响应码应该是400(错误请求)。

5

我有一个REST方法用于更新用户配置文件。如果某些参数无效,系统应该返回哪个状态码?例如,更改密码时,如果旧密码和数据库中的密码不相等。 400 Bad Request?


1
这不是一个错误请求,而是一个有效的业务错误,意味着返回200状态码和一些错误信息。 - JoseK
2
完全不同意200,这绝对应该是400范围内的内容。请参见https://dev59.com/cW445IYBdhLWcg3wmLdd。 - Jon
你需要在这方面再需要帮助吗? - benjiman
1个回答

9
你所描述的情况可以使用两种不同的响应代码来处理,如Richardson和Ruby在书籍RESTful webservices中所述: 400 Bad Request 当客户端提交一个PUT或POST请求时,常用此代码表示表示与请求一起提交的表现形式格式正确,但没有意义。因此,对于缺少或无效的参数使用它是完全可以的。然而,400是通用的客户端错误代码,您应该在响应体中向客户端提供一些进一步的信息。 409 Conflict 任何不能被服务器执行的请求都会使一个或多个资源处于不一致状态。因此,当用户尝试更改密码并且与旧密码的比较失败时,我会使用这个响应代码,就像您所描述的那样。
您还可以参考这个讨论REST HTTP status codes for failed validation or invalid duplicate

在处理密码和其他安全令牌时,必须小心不要在响应中泄露信息。希望尝试更改密码的操作者是已登录的用户,但如果有人劫持了会话或进行了一些恶意操作,特定的错误响应可能会让他们获取信息并进行更成功的攻击。在这种情况下,您可以只返回400并让您的UI给出一个模糊的消息“无法更改密码。也许您输入有误?” - Mnebuerquo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接