REST API返回自定义错误信息时,用400而非200响应码是否正确?
RESTful API自定义错误信息的响应码选择
首先明确:绝对不要用200状态码返回错误信息。200的核心语义是「请求已成功处理」,哪怕你在响应体里写了错误内容,客户端(比如前端框架、API网关)会默认把200判定为成功请求,很可能跳过错误处理逻辑,导致问题。
关于正确的响应码,要结合具体场景判断:
- 如果是查询特定用户资源(比如调用
GET /users/{username}查找某个用户)时发现用户名不存在,标准做法是返回404 Not Found,这完全贴合HTTP语义——请求的目标资源不存在。 - 如果是登录/身份验证场景(比如调用
POST /login提交的用户名不存在),这里有两种常见的合理选择:- 用401 Unauthorized:把「用户名不存在」归为身份验证失败的一种,和「密码错误」等统一用401,语义上更贴合身份验证场景。
- 用400 Bad Request:如果团队约定把所有客户端触发的业务逻辑错误(非资源不存在类)都归到400,这也完全可行,只要团队内部统一规则即可。
你同事主张的400是可以用来返回自定义错误信息的,只要响应体里明确给出错误详情即可,比如返回JSON格式的错误内容:
{ "error_code": "USER_NOT_FOUND", "error_message": "用户名不存在" }
最后提醒:状态码的使用核心是语义清晰+团队一致,尽量贴合HTTP标准语义能减少沟通成本,但如果团队有统一的约定,优先遵循约定。
内容的提问来源于stack exchange,提问作者James Maranga
相关产品推荐
相关产品推荐

