用途:在调用 OpenAI、Stripe、GitHub 等有速率限制的外部 API 时,实现生产级的限流、指数退避与重试策略,避免级联失败、遵守上游配额并提升负载下的韧性。
主要能力:按响应状态分类(200-299 成功;400/401/403/404 终止不重试;408/429 可重试;500/502/503/504 可重试);优先解析上游提示,包括 Retry-After(秒或 HTTP-date)与部分提供商的 x-ratelimit-reset(如 GitHub 的 epoch 秒);带全抖动的封顶指数退避;带最大重试次数与最大总耗时的重试循环;仅对重放安全的 GET、HEAD、OPTIONS、PUT、DELETE 或显式开启时才重试非幂等请求;可用令牌桶做客户端主动限流(如每分钟 60 次)。
使用方式:先分类响应,再解析限流头,然后在调用 fetch/httpx 的外层套用带重试的封装,并可按需加令牌桶。提供的示例含 TypeScript 的 getRetryDelay、fetchWithRetry、TokenBucket 与 Python 的 fetch_with_retry。上游提示是等待下限,不得截断;若提示超过剩余操作预算则停止调度。注意不同提供商的 reset 头单位与格式不同,解析前需查阅其当前文档。
适用场景:集成受配额限制的外部 API、收到 429 或 5xx 需优雅恢复、必须遵守 Retry-After、面向多提供商扇出调用,或用户要求“处理限流”“加重试逻辑”“退避策略”。
限制:不替代环境特定的验证、测试或专家审查;分布式系统中令牌桶仅为近似,多实例部署应使用 Redis 等共享存储限流;部分 API 使用非标准限流头;此处的时间上限约束重试等待而非单次挂起网络调用,需配合 AbortSignal 或客户端超时。状态变更请求仅在提供商提供幂等机制并复用稳定键时才重试。