为 API 错误设计重试与退避
目标
实现不会无限重试、也不会掩盖鉴权错误的请求策略。
前置条件
能够记录 HTTP 状态、响应错误码、请求 ID 和尝试次数。
步骤
- 将 400、401、403 和 model_not_found 视为需要修正输入或配置的终止错误。
- 只对 429、超时和明确的临时服务错误重试。
- 使用带随机抖动的指数退避,例如 1、2、4 秒,并设置最多三次。
- 如果响应提供 Retry-After,优先遵守该值。
- 每次失败记录请求 ID、状态、错误码和延迟,但不要记录令牌或敏感正文。
- 用模拟的 401、429 和连续超时验证分支。
预期结果
终止错误立即返回,可重试错误在上限内恢复,超过上限后给出可诊断记录。
排错
- 请求同时重试造成峰值:加入随机抖动。
- 任务重复执行:对有副作用的操作使用幂等键或禁止自动重试。
- 日志泄密:集中遮盖授权头和敏感字段。