Skip to content

技术2026-11-032 分钟阅读出自项目 · 企业查询数据中台 →

做 API 网关时踩过的 5 个坑:看起来对,其实在骗你

这些问题的共同点是:功能能跑,界面正常,数字也有,只是数字是错的。全部来自我给自己的项目做的一轮专项审计。

企业查询数据中台上线前,我给它做了一轮专项审计,修了 15 个问题。其中最让我后怕的不是会报错的那些,而是下面这 5 个——它们不报错,只是安静地给出错误的结论。

1. 把“猜测”存成了“答案”

按企业名称模糊搜索时,系统取候选列表的第一条,并把“搜索词 → 企业”的对应关系写进了别名表。之后再用同一个词查询,会直接命中缓存,返回那家企业,而且永远不再向上游核实。

一个猜测就这样被包装成了确定答案。修复很简单:只有精确类接口才允许写别名,模糊搜索一律不写。

2. 自己拦掉的请求,算成了上游的失败

上游失败率的统计口径是“没命中缓存且调用失败”。但被我们自己的风控拦掉的请求,恰好也满足这两个条件。

结果是:某个子公司一轮超频调用,就能把“上游失败率”顶到 100%,触发虚假的故障告警,甚至误熔断一个完全健康的数据源。统计时必须把鉴权失败和限流排除出去。

3. 没配置通知渠道,界面却显示“已发送”

告警发送函数在渠道未配置时返回了一段提示文字,而判断是否成功的逻辑只检查这段文字里有没有“失败”两个字。于是界面显示“已发送”,实际上一条都没推出去。

修复后改成结构化的三种状态(示意代码):

js
// 之前:字符串里没有“失败”就当成功
const allOk = !result.includes('失败');

// 之后:明确区分三态
// sent      已发送
// failed    发送失败
// undelivered  未送达(未配置渠道)

4. 重试了两次,配额只扣了一次

配额在重试循环外面只扣一次,但循环里每次重试都会真实地再调一次官方接口。长期下来,中台记录的用量比实际少,真到上限时是上游先报错,看板上却显示还没用完。

正确做法是 按真实的外部调用次数逐次扣减,全部失败时再全额退回。

5. 监控本身成了成本

最初我想给上游做真实探活。后来意识到:每一次探活都是一次计费调用,监控做得越勤,花的钱越多。

最后的方案是上游只做配置态检查,健康状况由真实业务调用的成功率来反映。

小结

这几个问题都通不过一条朴素的检验:把几个口径加起来,对不对得上总数? 缓存、穿透、拦截三态之和必须等于总调用量;中台记的用量必须等于上游账单。写自动化测试时,我后来专门加了这类“对账”用例。

陕ICP备2026005972号-2