我写了个“能少写点代码”的汇率 SDK:Exchange Rate SDK
如果你做过电商、出海、旅行、订阅制产品,或者任何“用户可能会拿着不同货币来烦你”的业务,你大概率经历过这种对话:
产品/老板:这个页面加个汇率换算吧,很简单的。
你:行啊。(内心:又来了)
因为“很简单”的背后通常是:
- 选个汇率接口(最好不要 key,不要注册,不要配额,不要收费……懂的都懂)
- 处理超时、网络抖动、429/5xx(不然线上会让你看到人间真实)
- 缓存(不然你会被同事/自己/用户一起打爆)
- 货币列表(最好还能搜中文,不然“人民币”三个字能让你写一整套映射)
- 最后再把这些东西重复粘贴到下一个项目里,继续假装这叫“沉淀”
于是我写了 exchange-rate-sdk:一个轻量级、跨平台(浏览器 + Node.js)的汇率查询 SDK。它的目标就一个:把这些“每个项目都要做一遍、又不想做一遍”的活儿,打包成一个你能直接用的工具。
如果你只想先试试水,直接去 Playground:
https://chengzuopeng.github.io/exchange-rate-sdk/
顺手把链接也放这儿(方便你收藏/转发/甩给同事):
- GitHub:https://github.com/chengzuopeng/exchange-rate-sdk
- npm:https://www.npmjs.com/package/exchange-rate-sdk
它到底解决了什么问题?
我把它做成了“开箱即用”的风格,尽量不让你在接入时做选择题。
跨平台:浏览器和 Node.js 都能跑
同一套 API,不用你写两份逻辑。智能缓存:默认就给你省请求
- 浏览器:
localStorage + 内存双层缓存(刷新页面也还在) - Node.js:内存缓存(进程重启就清空,简单直接)
自动重试:网络不稳定时别立刻跪
遇到网络错误、超时、5xx、429,会按指数退避自动重试(你可以配置最大重试次数和延迟基数)。零运行时依赖
我知道很多人对依赖洁癖(我也是)。所以运行时不带第三方库,尽量减少体积和供应链焦虑。离线货币信息 + 中英文搜索
内置了 168 种货币信息:你可以离线查USD是什么、也可以直接搜“人民币 / Dollar / United States”。TypeScript 友好
类型定义齐全,写起来不靠猜。
30 秒上手(真的)
安装:
1 | npm i exchange-rate-sdk |
npm 包主页:https://www.npmjs.com/package/exchange-rate-sdk
查询汇率:
1 | import { ExchangeRateSDK } from 'exchange-rate-sdk'; |
金额换算:
1 | const result = await client.convert(100, 'USD', 'CNY'); |
你会喜欢它的几个“细节”
1) 缓存是默认开启的
绝大多数业务里,汇率没必要每次都去打接口。SDK 默认缓存 24 小时,你也可以改:
1 | const client = new ExchangeRateSDK({ cacheTTL: 60 * 60 * 1000 }); // 1 小时 |
必要时一键清空:
1 | client.clearCache(); |
2) 重试不是“无限莽”,而是可控的
你可以把它当成“网络偶尔抽风时的缓冲垫”:
1 | const client = new ExchangeRateSDK({ |
3) 货币信息离线可查,还能搜中文(这是我自己踩过的坑)
1 | client.getCurrency('USD'); |
我做这个功能的动机非常朴素:
当 PM 在群里发“把人民币也支持一下”的时候,你不想回一句“人民币本来就支持啊,只是叫 CNY”,然后被回一句“用户不知道 CNY”。
4) 错误是“可判断”的,不是“随缘 catch”
SDK 统一抛出带 code 的错误,你可以按错误码做兜底策略:
1 | import { isSDKError } from 'exchange-rate-sdk'; |
关于数据源(以及一点点真诚的免责声明)
SDK 默认请求的是 https://api.exchangerate-api.com/v4/latest/{BASE}。
这意味着:
- 接入时不需要你额外配置 key(主打一个少操心)
- 但它终究是外部 API:可能会有配额、限流、偶发波动
所以我才把缓存、超时、重试都做成了默认能力
另外,汇率适合做“展示/估算/结算前提示”,不适合做“高频交易/套利系统的核心依据”。
别问我为什么突然严肃,问就是我不想让你背锅(也不想我背锅)。
Node.js / 浏览器使用提示
- 浏览器:直接用就行(有
localStorage的地方缓存会更香) - Node.js:需要全局
fetch(Node 18+ 自带;更老版本你可以自己加一个 fetch polyfill)
最后:你可以怎么开始用它?
- 先去 Playground 玩一圈:https://chengzuopeng.github.io/exchange-rate-sdk/
- 在你的项目里装上:
npm i exchange-rate-sdk - 把你那段“汇率请求 + 缓存 + 重试 + 错误处理”的代码删掉(这一步最解压)
如果你用起来有任何不顺手的地方,欢迎提 issue。
我写这个 SDK 的初衷就是:让“汇率这件小事”不要再占用我们太多生命值。
觉得有用的话,顺手点个 Star ⭐ 支持一下~
Happy Coding!
