Stack Overflow 上的汇率 API:开发者常见报错,逐一解答
开发者在 Stack Overflow 上遇到的外汇 API 报错,逐一解决:401 认证错误、429 限流、浏览器端 CORS 错误、周末汇率不更新、如何换算金额,以及如何获取历史或时间序列数据。
集成出错时,开发者会把报错粘到 Stack Overflow。对于汇率 API,问题几乎总是那几类:密钥被拒、触达限流上限、CORS 错误,或者周末汇率看起来没有变化。以下是直接的解决方案,以 exchangerate.dev 为实例。每段代码片段都是针对 https://api.exchangerate.dev 的真实调用。
Bearer 前缀,或者密钥因复制粘贴而带入了多余的换行符。X-RateLimit-Remaining 并在归零前降速;免费套餐每分钟限 12 个请求。source 和 market_session 会告诉你汇率为何没有变动。基础 URL 为 https://api.exchangerate.dev。首次调用可匿名进行(按 IP 限速),因此你可以在注册免费密钥之前重现以下任意示例。
401 Unauthorized——密钥被拒
密钥需放入 Authorization 请求头,以 Bearer Token 形式传递,且必须有 Bearer 加一个空格。密钥前缀为 exr_live_。
401 的常见原因:缺少 Bearer 前缀、复制粘贴时密钥带入了多余的换行符或引号,或者持有密钥的环境变量未加载。对于无法设置 Authorization 头的平台,也可以使用 X-API-Key 请求头传递密钥。
429 Too Many Requests——处理限流
每条响应都携带 X-RateLimit-Remaining。读取它并在归零前主动降速,而不是盲目轮询。免费套餐每分钟 12 个请求,基础版 120 个,专业版 500 个。你可以随时通过 GET /v1/account 查看剩余配额和每月重置时间。参考汇率不会每秒变化,因此客户端短暂缓存通常就能让你轻松控制在限额以内。
CORS 错误——从浏览器调用 API
不要在前端 JavaScript 中携带你的密钥直接调用 API:这会将 exr_live_... 暴露给任何打开开发者工具的人,浏览器也会因 CORS 拦截请求。应通过你自己的后端代理转发调用,将密钥保留在服务端,让浏览器请求你的接口。
汇率看起来没有变化,或周末不更新
这是预期行为,响应本身会告诉你原因。16 种货币实时刷新(交易日约每 60 秒更新一次);其余为来自 ECB 和 FRED 的每日参考汇率。周末银行间市场休市,实时推送暂停,每日参考定盘价沿用周五数据。以下两个字段对此有明确说明:
如何换算金额,而不只是读取汇率?
使用 /v1/convert/{from}/{to}/{amount}。它会同时返回汇率和换算后的金额,无需手动相乘:
如何获取历史或时间序列数据?
查询某个历史日期,只需在路径中指定日期:GET /v1/{YYYY-MM-DD}/{base},历史数据最早可追溯至 1999-01-04。如需一次性获取某个日期范围的完整序列,使用 GET /v1/range 并传入 start_date 和 end_date;该接口采用键集分页,请跟随游标翻页,不要一次请求过大的时间范围。
从 Frankfurter 迁移时遇到报错?
请求参数与 Frankfurter 兼容,因此大多数迁移只需更换基础 URL,无需重写代码。响应格式的差异在于,本 API 会新增字段(source、market_session、notice)而非删除字段。从 Frankfurter 迁移指南 提供了详细的字段映射。
最简单的可用调用
无需密钥,无需依赖:
你将获得汇率数据,以及 source 和 market_session,让你清楚每条数据的新鲜程度。申请免费密钥 可将限额提升至每月 10,000 次调用,注册只需一分钟。