API 规范本身不返回错误,但若调用不符合规范或服务端异常,会
API 规范返回错误的最佳实践
常见的 API 错误返回方式
API 错误返回通常包含以下要素,需遵循规范以确保调用方能够清晰理解错误原因并采取相应措施。
要素 | 说明 |
---|---|
HTTP 状态码 | 表示请求层级的错误(如 404 Not Found 、500 Internal Server Error )。 |
业务错误码 | 表示业务逻辑错误(如 ORDER_NOT_FOUND 、INSUFFICIENT_FUNDS )。 |
错误消息体 | 包含错误的详细信息(如错误描述、解决方案、字段验证失败等)。 |
API 错误返回的规范要点
-
- 所有接口的错误返回结构应统一,
{ "code": "ERROR_CODE", // 业务错误码 "message": "Error description", // 错误描述 "details": null // 可选的附加信息(如字段校验失败的具体字段) }
- 所有接口的错误返回结构应统一,
明确性
- HTTP 状态码与业务错误码需区分:
- HTTP 状态码:表示网络或请求层面的错误(如
400 Bad Request
)。 - 业务错误码:表示业务逻辑错误(如
USER_NOT_EXIST
)。
- HTTP 状态码:表示网络或请求层面的错误(如
- 避免仅返回模糊的错误信息(如“系统错误”)。
- HTTP 状态码与业务错误码需区分:
安全性
- 错误信息中不应包含敏感数据(如服务器路径、数据库信息)。
- 对客户端暴露的错误信息需经过脱敏处理。
错误返回的示例对比
不规范示例 | 规范示例 |
---|---|
仅返回 HTTP 状态码,无具体错误信息(如直接返回 500 ) | 结合 HTTP 状态码和业务错误码: |
混合使用 HTTP 状态码和业务错误码(如 400 + SUCCESS ) | HTTP 状态码表示请求成功/失败,业务错误码表示具体业务逻辑错误: |
错误信息过于简单或模糊(如 "Error occurred" ) | 结构化错误信息,包含错误码、描述和解决方案: |
规范示例:
{ "code": "USER_NOT_FOUND", "message": "The user with ID 123 does not exist.", "httpStatus": 404, "details": { "field": "userId", "issue": "Invalid or non-existent ID" } }
最佳实践
使用标准 HTTP 状态码
- 客户端可通过状态码快速判断错误类型(如
4xx
表示客户端错误,5xx
表示服务端错误)。
- 客户端可通过状态码快速判断错误类型(如
定义清晰的业务错误码体系
- 错误码需具备唯一性和可读性(如
AUTH_TOKEN_EXPIRED
)。
- 错误码需具备唯一性和可读性(如
统一错误响应结构
所有接口返回相同的错误结构,便于客户端解析。
避免过度暴露细节
生产环境中隐藏技术细节(如堆栈信息),仅返回用户友好的提示。
记录错误日志
服务端需记录详细错误日志(包括时间、请求参数、堆栈信息),便于排查问题。
相关问题与解答
问题 1:如何处理跨平台(Web/App/第三方)的错误兼容性?
- 解答:
- 遵循通用的 HTTP 状态码和 JSON 结构化错误返回。
- 提供多语言错误消息支持(如国际化
i18n
)。 - 对第三方调用者提供详细的 API 文档,明确错误码含义。
问题 2:如何设计业务错误码体系?
- 解答:
- 按模块分类:如
USER_*
(用户相关)、ORDER_*
(订单相关)。 - 按错误类型分类:如
INVALID_PARAMETER
(参数错误)、RESOURCE_NOT_FOUND
(资源不存在)。 - 统一维护:将错误码定义为常量或枚举,集中管理并同步更新
- 按模块分类:如
小伙伴们,上文介绍了“api 规范返回错误吗”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复