关于 upfetch
upfetch 是一个基于 fetch 的可复用请求客户端用法指南,面向需要统一请求默认值、数据校验和生命周期处理的 TypeScript 开发者。它涵盖请求与响应整形、重试、超时及钩子,并按主题提供进一步参考。
主要功能
- 01按请求动态设置默认值
- 02整形认证、参数和请求体
- 03使用 schema 进行运行时校验
- 04配置响应解析与错误处理
- 05处理重试、超时和生命周期钩子
适用场景
- 01为 API 请求复用基础 URL 和请求头
- 02校验服务端返回的数据结构
- 03为请求设置重试与超时逻辑
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ l-blondy/ up-fetch --skill upfetch安装后在 Claude Code 中输入/upfetch确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/auth-and-request-shaping.mdclient-setup-and-dynamic-defaults.mdretries-timeouts-and-lifecycle.mdstreaming-and-runtime-caveats.mdvalidation-parsing-and-errors.md详细介绍
upfetch
当你需要一个可复用的 fetch 客户端,并具备请求级默认值、自动请求/响应整形、运行时校验、重试和生命周期钩子时,请使用 up-fetch。
心智模型
up(fetchFn, getDefaultOptions?)创建可复用的客户端。getDefaultOptions(input, options, ctx)会在每次请求时运行。upfetch(input, options?, ctx?)执行一次请求。- 保持
SKILL.md的内容概括;需要详细信息时,加载references/下的相关文件。
最简模式
import { up } from 'up-fetch'
import { z } from 'zod'
export const upfetch = up(fetch, () => ({
baseUrl: 'https://api.example.com',
headers: {
Authorization: readToken() ? `Bearer ${readToken()}` : undefined,
},
timeout: 5000,
}))
const user = await upfetch('/users/1', {
schema: z.object({
id: z.number(),
name: z.string(),
}),
})
工作流
- 从客户端设置和动态默认值开始。
- 如果请求需要身份验证、参数、请求体整形或合并语义,请阅读身份验证和请求整形。
- 如果响应契约很重要,请阅读校验、解析和错误。
- 如果重试、超时或钩子时机很重要,请阅读重试、超时和生命周期。
- 如果流式处理或运行时注意事项很重要,请阅读流式处理和运行时注意事项。
高价值规则
- 将函数作为
up()的第二个参数传入,而不是传入普通对象。 - 在该函数内读取身份验证信息和其他可变默认值,以确保值保持最新。
- 使用
params和body,而不是手动序列化查询字符串或 JSON。 - 需要运行时信任时请使用
schema;单靠 TypeScript 泛型不会校验载荷。 - 如果需要将错误作为值处理,请先设置
reject: () => false,再依赖parseResponse。 - 优先使用
globalThis.fetch,而不是导入的undici.fetch。
参考资料
评论
支持 Markdown