接口请求同时存在400与404问题时,应优先返回哪种状态码?
HTTP PUT请求错误优先级问题
示例users表
| id | name |
|---|---|
| 1 | John Doe |
| 2 | Jane Doe |
不同请求场景的响应情况
正常更新请求:发送
PUT http://{host}:{port}/users/1并提供正确JSON请求体:{ "name": "John Roe" }响应(200):
{ "message": "Update Success" }返回成功响应。
资源不存在但请求体合法:发送
PUT http://{host}:{port}/users/3且请求体正确,返回404 Not Found。资源存在但请求体错误:发送
PUT http://{host}:{port}/users/2但请求体错误:{ "name": "" }错误响应(400):
{ "message": "name is required" }返回
400 Bad Request。
问题
如果发送的请求既指向不存在的资源(如PUT http://{host}:{port}/users/3),同时JSON请求体又不正确,此时应返回400还是404?应优先检查哪种情况?
答案
应该优先返回400 Bad Request,原因如下:
- 请求体的格式或内容错误属于客户端请求本身的基础问题,服务器连有效请求内容都无法验证,没必要继续执行资源存在性检查。
- 404的适用场景是请求本身合法,但目标资源不存在;而当请求体不合法时,直接终止后续流程返回400更符合HTTP规范的逻辑。
- 从开发者调试角度,先提示请求体错误,能让用户先修正最基础的请求问题,再排查资源相关的问题,效率更高。
内容的提问来源于stack exchange,提问作者David Yappeter
相关产品推荐
相关产品推荐

