围绕外部 API 假设进行设计:来自免费汇率 API 的教训

发布: (2026年1月2日 GMT+8 09:01)
3 min read
原文: Dev.to

Source: Dev.to

封面图片:关于外部 API 假设的设计:来自免费汇率 API 的教训

项目概述

我开发并部署了一个名为 YenUp 的应用,它会比较今天的汇率与昨天的汇率,并根据结果发送通知。为了保持项目简洁且免费,我使用 Frankfurter API 作为数据源。

项目完成后我很高兴。但很快我注意到收到的通知有问题。

通知应该在今天的汇率优于昨天时才触发。为了端到端调试交付流水线,我添加了一个 notification=true 标记,即使汇率未变化也强制发送 Slack 消息。

我实际收到的通知如下:

Test Notification (forced). CAD/JPY: Yesterday 114.4300 -> Today 114.4300

起初,我怀疑是自己实现中的 bug。我检查了逻辑并再次核对了比较代码。最终,我意识到问题不在我的代码,而在我对 API 的假设上。

这种行为还被我的回退逻辑进一步放大。当特定日期的数据不可用(例如周末或每日更新之前),我的实现会回退到 latest 端点。于是,非工作日的汇率实际上会归并为同一个基础汇率。

我的收获

真正的问题不是 API 本身的行为,而是我对它的假设。我在设计逻辑时默认 “今天” 与 “昨天” 是日历天。然而,外部 API 常常根据自己的业务规则来定义这些概念,这些规则可能与产品使用数据的方式不一致。

接下来我会做什么

基于此,我正在考虑将比较逻辑改为使用 工作日 而不是日历天。由于在不同货币之间一致地定义工作日会增加额外的复杂性,这一点我还没有完全实现。

这个小 bug 让我重新审视了自己的假设,也改变了我对外部 API 与业务规则的思考方式。希望在后续项目中继续学习。

Back to Blog

相关文章

阅读更多 »

别再像2015年那样写API

我们已经进入2025年,仍有许多代码库把 API 视为简单的“返回 JSON 的端点”。如果你的 API 设计仍停留在基本的 CRUD 路由上,你正……