错误与状态码

错误以 JSON 返回,结构始终一致,并且总是带有稳定的机器可读代码。请依据代码分支,而不是依据消息。

结构

每一次失败都会返回一个对象,其中包含供人阅读的 error 和稳定的 code。消息是写给人看的,可能会被改写;代码是一项约定,不会在你不知情时改变。

{
  "error": "That file is larger than the 200 MB limit on your plan.",
  "code": "VALIDATION_FAILED"
}

你应当处理的代码

代码HTTP含义
NOT_AUTHENTICATED401缺少 bearer 令牌或格式不正确
FORBIDDEN403密钥有效,但无权执行此操作
NOT_ENTITLED402该账户的方案不包含 API 访问
VALIDATION_FAILED400 / 413请求有误、不支持的转换,或文件过大
NOT_FOUND404没有该任务,或它属于另一个账户
RATE_LIMITED429已达每小时限制。请稍候重试。
INTERNAL500我们这边出了问题。可以安全重试。

哪些值得重试

429500 值得延迟后重试 —— 请采用退避而不是死循环,因为重试和其他请求一样会计入你的每小时限制。

其余的对该请求而言都是终局。重试 400402404 只会得到相同的答案,并为此消耗你的频率额度。

没有 JSON 主体的 502503 并非来自应用本身 —— 那是它前面的代理,那种情况下重试总是值得的。