大家好,我是Tony Bai。
欢迎来到我们的专栏 《API 设计之道:从设计模式到 Gin 工程化实现》的第六讲。
在前面的课程中,我们讨论了如何设计 URL、如何传输数据、如何分页。今天,我们来聊聊一个略显沉重但绝对避不开的话题:当 API 出错时,我们该怎么办?
请回想一下,你在对接第三方接口,或者前端调用你的接口时,是否遇到过以下令人抓狂的场景:
200 OK 的谎言:HTTP 状态码是
200 OK,但 Body 里赫然写着{"code": 50001, "msg": "server error"}。监控系统以为一切正常,前端代码里却不得不写满if res.code != 0的防御逻辑。错误码猜谜:收到一个
400 Bad Request,Body 里只有一个字符串"param error"。到底是哪个参数错了?是必填项没填,还是格式不对?结构不统一:A 接口报错用
message字段,B 接口报错用msg字段,C 接口直接返回纯文本。
这些混乱的设计,不仅增加了沟通成本,更让系统的可观测性(Observability)大打折扣。
在云原生架构中,错误处理不仅仅是打印一行日志那么简单。我们需要一种结构化、标准化的错误模型,让客户端(无论是前端 App 还是其他微服务)能够自动化地处理错误,同时让运维人员能够快速定位根因。
今天这一讲,我们将对标RFC 7807标准和Google AIP-193规范,在 Gin 中构建一套企业级的API错误处理机制。
理论:告别“盲盒”式报错
什么是好的错误处理?它应该具备两个核心特征:机器可读(Machine-readable)和人类可读(Human-readable)。