Ky 轻量请求
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_f1b049da/cg20260901 到当前 AI 助手。
技能介绍
先解决什么问题
原生 fetch 足够底层,但在工程实践里总会碰到重复代码:超时要自己拼 AbortController,失败重试要手写循环,Token 要逐个接口手动拼接。团队里每个开发者都写一遍相似逻辑,很容易出现 timeout 值不统一、重试策略不一致的问题;而 axios 对只需要 REST API 调用的前端项目来说体积偏重。这个技能要解决的就是:在调用自家 REST API 这类场景下,用极薄的封装拿到超时、重试、Token 自动注入,又不引入过重的依赖。
它是怎么工作的
技能以 小四原创 思路实现:
- 依赖
ky:Sindre 出品的 fetch 薄封装,体积小,自带重试、超时、hooks 能力。 - 单例工厂
createApiClient({ prefixUrl, getToken }):通过ky.create建立共享配置,统一拼接 API 前缀,并在beforeRequesthook 中注入 Token。 .json()简化解析:调用端直接拿到解析后的 JSON,不必再处理文本转换。getJson/postJson封装:分别提供列表读取与保存入口;非 2xx 默认抛HTTPError,UI 层捕获后可统一提示用户。
具体步骤为:
npm i ky引入依赖。- 定义
createApiClient,传入prefixUrl与getToken,导出单例。 - 在实例上实现
getJson、postJson等方法,通过try/catch处理HTTPError。 - 覆盖 401 无 Token、超时、GET 重试等场景做自测。
适用边界与注意点
- 不要当完整 axios 用:ky 是 fetch 薄封装,缺少 axios 生态里的完整拦截器能力;如果需要更全栈同构的方案,可另看
ofetch。 - 非 2xx 直接抛错:Ky 默认把非 2xx 当错误,业务级
code !== 0需在调用层再判断。 - 重试别乱开:非幂等的 POST(如提交订单)不要盲目开启自动重试,避免重复下单;默认建议只对 GET 等幂等请求启用,重试次数也不宜过高。
- Token 必须安全读取:Token 只从安全存储中获取,禁止将密钥硬编码进仓库。
- 复杂请求可回退原生方案:大文件上传、下载进度等场景可回退到原生
fetch或XHR。
一句话总结
适合在 Demo、工具箱或中小项目中快速搭建一套轻量、同构、好维护的请求层,又不想被 axios 的体积拖慢加载的场景。
使用场景
- 搭建 Demo 或内部工具箱时,需要快速调用自家 REST API 拉取列表数据并渲染,不想引入 axios
- 接口偶发超时或网络抖动,想给 GET 请求加有限次自动重试,又避免 POST 重复提交
- 多个页面共享同一个请求实例,需统一在请求头注入 Token,免去逐接口手写鉴权
- 需要把非 2xx 响应统一捕获为 HTTPError,在界面层给用户友好的错误提示
适合人员
- 独立开发者:做一个小工具站,接口只有自家 REST API,希望请求层足够轻、好维护
- 前端工程师:在工具箱项目中维护统一请求封装,需要控制 bundle 体积并统一超时与重试策略
- 全栈开发者:客户端要调用自家 REST API,想用轻量同构方案减少请求样板代码
- 准备技术博客示例的开发者:想演示 ky.create 实例、Token 钩子与 .json() 的基本用法