HTTP/1.1
200 OK
{
"error": "出错了"
}
问题分析
- ⚠️ HTTP 状态码说"成功",但业务说"出错" - 前后端状态不一致
- ⚠️ 错误信息太笼统,无法定位问题
- ⚠️ 没有错误代码,难以程序化判断
- ⚠️ 浏览器和 CDN 会缓存这个"成功的"响应
HTTP/1.1
422 Unprocessable Entity
{{ JSON.stringify(goodResponse, null, 2) }}
正确做法
- ✅ 正确的 HTTP 状态码: 422 表示语义错误
- ✅ 业务错误码: `code: 20003` 可用于程序判断
- ✅ 详细错误信息: `errors` 数组包含具体字段和原因
- ✅ 可追踪性: `request_id` 用于日志查询
- ✅ 帮助链接: `help_url` 引导用户查看文档
错误码体系
{{ item.code }}
{{ item.desc }}