mcpField
U
upfetch

upfetch

github.com/l-blondy开发1.4k43 次安装8 周前更新
代码仓库

关于 upfetch

upfetch 是一个基于 fetch 的可复用请求客户端用法指南,面向需要统一请求默认值、数据校验和生命周期处理的 TypeScript 开发者。它涵盖请求与响应整形、重试、超时及钩子,并按主题提供进一步参考。

主要功能

  1. 01按请求动态设置默认值
  2. 02整形认证、参数和请求体
  3. 03使用 schema 进行运行时校验
  4. 04配置响应解析与错误处理
  5. 05处理重试、超时和生命周期钩子

适用场景

  1. 01为 API 请求复用基础 URL 和请求头
  2. 02校验服务端返回的数据结构
  3. 03为请求设置重试与超时逻辑

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/l-blondy/up-fetch --skill upfetch

安装后在 Claude Code 中输入/upfetch确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
auth-and-request-shaping.md
client-setup-and-dynamic-defaults.md
retries-timeouts-and-lifecycle.md
streaming-and-runtime-caveats.md
validation-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(),
   }),
})

工作流

  1. 从客户端设置和动态默认值开始。
  2. 如果请求需要身份验证、参数、请求体整形或合并语义,请阅读身份验证和请求整形。
  3. 如果响应契约很重要,请阅读校验、解析和错误。
  4. 如果重试、超时或钩子时机很重要,请阅读重试、超时和生命周期。
  5. 如果流式处理或运行时注意事项很重要,请阅读流式处理和运行时注意事项。

高价值规则

  • 将函数作为 up() 的第二个参数传入,而不是传入普通对象。
  • 在该函数内读取身份验证信息和其他可变默认值,以确保值保持最新。
  • 使用 params 和 body,而不是手动序列化查询字符串或 JSON。
  • 需要运行时信任时请使用 schema;单靠 TypeScript 泛型不会校验载荷。
  • 如果需要将错误作为值处理,请先设置 reject: () => false,再依赖 parseResponse。
  • 优先使用 globalThis.fetch,而不是导入的 undici.fetch。

参考资料

评论

支持 Markdown