标准答案
- HTTP 状态码表达通用协议结果,例如认证失败、资源不存在、冲突、限流或服务端异常。
- 业务错误码表达稳定且可枚举的业务原因,例如订单状态不允许取消、库存不足或幂等键冲突,客户端可据此决定交互分支。
- 对用户返回简短、安全、可执行的提示;字段校验错误可返回字段名和规则,但不要返回 SQL、堆栈、密码或下游地址。
- 内部日志和追踪记录请求标识、调用链、异常类型、依赖名称、耗时和安全脱敏后的上下文,供工程人员定位。
- 错误映射应集中管理并有测试,确保同一种领域错误在不同入口返回一致的状态码和错误码。
题目解析
错误响应是 API 契约的一部分。错误码随意变化会让客户端的重试、跳转和提示逻辑失效。
可定位不等于把所有异常原样透出。把 requestId 返回给用户并在内部关联日志,通常比暴露堆栈更安全有效。
常见误区
- 用异常类名、数据库错误文本或堆栈作为公开错误信息。
- 所有业务失败都用同一个 code,导致客户端只能按文案判断。
- 只设计前端提示,没有保留可关联日志和链路的请求标识。