mcpField
U
upfetch

upfetch

github.com/l-blondy開発1.4k43 回インストール8 週間前に更新
リポジトリ

upfetch について

upfetchは、再利用可能なfetchクライアントの使い方を説明するガイドです。リクエストの既定値、検証、ライフサイクル処理が必要なTypeScript開発者向けに、リクエスト・レスポンス整形やリトライ、タイムアウト、フックを扱います。

主な機能

  1. 01リクエストごとの動的な既定値設定
  2. 02認証、パラメーター、リクエストボディの整形
  3. 03スキーマによるランタイム検証
  4. 04レスポンス解析とエラー処理の設定
  5. 05リトライ、タイムアウト、ライフサイクルフック

活用シーン

  1. 01APIリクエスト間でベース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

再利用可能なフェッチクライアントが必要な場合は、リクエストごとのデフォルト設定、自動的なリクエスト/レスポンスの整形、実行時検証、リトライ、ライフサイクルフックを備えた up-fetch を使用してください。

基本的な考え方

  • up(fetchFn, getDefaultOptions?) で再利用可能なクライアントを作成します。
  • getDefaultOptions(input, options, ctx) はリクエストごとに実行されます。
  • upfetch(input, options?, ctx?) でリクエストを1回実行します。
  • 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() の第2引数には、プレーンオブジェクトではなく関数を渡してください。
  • 値を常に最新に保つため、認証情報などの可変デフォルト設定は、その関数内で読み取ってください。
  • クエリー文字列や JSON を手動でシリアライズする代わりに、params と body を使用してください。
  • 実行時の信頼性が必要な場合は schema を使用してください。TypeScript のジェネリクスだけではペイロードを検証できません。
  • エラーを値として扱う場合は、parseResponse に依存する前に reject: () => false を設定してください。
  • インポートした undici.fetch よりも globalThis.fetch を優先してください。

リファレンス

コメント