レート制限とクォータ

2 つの時計の上の 2 つの制限、どちらもアカウントのもの。現在地を示すヘッダーと、429 の見た目。

2 つの制限

バーストは 1 分あたりのリクエスト数です。サービングノードごとに数えるため、ノードが 2 つあればアカウントは一時的にその 2 倍まで届くことがあります。共有カウンターの代価を払うより、それを受け入れてここに書いています。

クォータは UTC の 1 日あたりのリクエスト数です。これは固い上限で、超えると UTC の 0 時まですべてのリクエストが 429 を返し、超過分が請求されることはありません。ティアは定額です。

どちらもアカウントのもので、そのすべてのキーで共有されます。どちらかの制限で拒否されたリクエストは数えられないので、429 に当たり続けるクライアントがその日を使い切ることはありません。

ヘッダー

ヘッダー時計意味
x-ratelimit-limit分ティアの 1 分あたりのリクエスト数。
x-ratelimit-remaining分このノードでこの 1 分に残っている数。
x-ratelimit-reset分この 1 分のウィンドウが終わるまでの秒数。
x-quota-limit日ティアの 1 日あたりのリクエスト数。
x-quota-remaining日今日の残り。このリクエストを数えた後の値。
x-quota-reset日UTC の 0 時までの秒数。
retry-afterどちらか429 のときだけ。拒否した制限が解けるまでの秒数。

ティア

各ティアのバーストとクォータは料金ページにあり、API が適用するのと同じ表から読まれます。すべてのレスポンスの x-ratelimit-limit と x-quota-limit にも載ります。

429 が言うこと

429 · バースト · retry-after: 23
{
  "errors": [
    {
      "code": "rate_limited",
      "detail": "The free tier allows 60 requests a minute"
    }
  ]
}
429 · 1 日 · retry-after: 31260
{
  "errors": [
    {
      "code": "quota_exceeded",
      "detail": "The free tier's 1000 requests a day are used; the quota resets at midnight UTC. A higher tier is at https://immit.co/developers/pricing"
    }
  ]
}

retry-after に従って待ってください。1 日のクォータについては、リセットまで止まるか、ティアを上げるのが正直な答えです。上げた分はすぐに適用されます。

あなたの側でのキャッシュ

キー付きのエントリーレスポンスは ETag 付きの Cache-Control: private, max-age=3600 です。共有キャッシュがあなたのヒットを配ると、計測されないまま配ることになるからです。If-None-Match を送れば、304 のときにパースするものはありません。ただし 304 も 1 リクエストとして数えられます。言語と見出し語をキーに自分のサーバーでエントリーをキャッシュしてください。データはゆっくり変わり、変わった時は updated_at が示します。キャッシュするクライアントがクォータに当たることはめったにありません。