Agent Skills
返回列表
Ky 轻量请求

Ky 轻量请求

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 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 前缀,并在 beforeRequest hook 中注入 Token。
  • .json() 简化解析:调用端直接拿到解析后的 JSON,不必再处理文本转换。
  • getJson / postJson 封装:分别提供列表读取与保存入口;非 2xx 默认抛 HTTPError,UI 层捕获后可统一提示用户。

具体步骤为:

  1. npm i ky 引入依赖。
  2. 定义 createApiClient,传入 prefixUrl 与 getToken,导出单例。
  3. 在实例上实现 getJson、postJson 等方法,通过 try/catch 处理 HTTPError。
  4. 覆盖 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() 的基本用法