APIスロットリング えーぴーあいすろっとりんぐ
簡単に言うとこんな感じ!
人気ラーメン店が「1組1時間以内でお願いします」と回転率を管理するイメージだよ。APIに「1分間に〇〇回まで」って上限を設けて、使いすぎる人を制限することで、サーバーが落ちないようにする仕組みなんだ!
APIスロットリングとは
APIスロットリング(API Throttling)とは、APIへのリクエスト数を一定時間内に制限する仕組みのことです。「throttle(絞り弁)」という言葉のとおり、流量を絞ることでサーバーへの負荷を適切にコントロールします。レート制限(Rate Limiting)と呼ばれることもあり、両者はほぼ同じ意味で使われます。
ビジネスシステムが外部サービスのAPIを呼び出す場面で特に重要な概念です。たとえば、自社の受発注システムが物流会社のAPIに1秒間に何千回もリクエストを送り続けたとしたら、相手のサーバーに深刻な負荷をかけてしまいます。スロットリングはこうした「意図せぬ攻撃」や「悪意ある乱用」を防ぐための安全弁として機能します。
近年はクラウドサービスやSaaSの普及に伴い、ほぼすべての商用APIにスロットリングが設定されています。システム選定・発注時にはAPIの制限値(クォータ)の確認が必須であり、ビジネス側がこの概念を理解しておくことが実務上の判断ミスを防ぎます。
スロットリングの仕組みと種類
スロットリングにはいくつかの制限単位と計測方式があります。組み合わせて設定されることも多いです。
| 制限の種類 | 意味 | 例 |
|---|---|---|
| リクエスト数/秒(RPS) | 1秒あたりの最大リクエスト数 | 10 RPS |
| リクエスト数/分(RPM) | 1分あたりの最大リクエスト数 | 600 RPM |
| リクエスト数/日(RPD) | 1日あたりの最大リクエスト数 | 10,000 RPD |
| クォータ | プランに応じた月次上限 | 100万回/月 |
| 同時接続数 | 並行して処理できる接続の上限 | 最大50コネクション |
制限を超えると、APIサーバーは HTTPステータスコード 429 Too Many Requests を返します。適切に設計されたシステムはこのエラーを受け取ったら、一定時間待ってからリトライする処理(バックオフ)を実装します。
覚え方:「道路の制限速度」
スロットリングは道路の制限速度と同じです。「60 km/h まで」という制限があるのは、事故(サーバー障害)を防ぐためであり、みんなが安全に道路(API)を使えるようにする仕組みです。制限を破ると警告(429エラー)が来て、しばらく走れなくなります。
主なアルゴリズムの分類
| アルゴリズム | 特徴 | 向いている場面 |
|---|---|---|
| 固定ウィンドウ | 「1分ごと」など固定時間で集計 | シンプルで実装しやすい |
| スライディングウィンドウ | 直近の時間帯をずらしながら集計 | より公平な制限が可能 |
| トークンバケット | バケツにトークンが補充され、使うたびに消費 | バースト(瞬間的な大量送信)を許容したいとき |
| リーキーバケット | 一定速度でしか処理しない(溢れると廃棄) | 流量を厳密に平滑化したいとき |
歴史と背景
- 2000年代初頭 — Web APIが普及し始め、過剰アクセスによるサーバー障害が頻発するように
- 2006年 — AWSがAmazon S3を公開。商用クラウドAPIにレート制限を標準搭載する流れが始まる
- 2007〜2010年 — Twitter・Facebookなどソーシャルメディアの公開APIが爆発的に普及。スクレイピング対策としてもスロットリングが注目される
- 2012年頃 — API Gatewayというカテゴリが確立。スロットリングはゲートウェイの標準機能として組み込まれる
- 2015年以降 — マイクロサービス化の加速に伴い、サービス間通信でのスロットリング(サーキットブレーカーパターンなど)が設計の常識に
- 現在 — SalesforceやSlack、Google Maps APIなど主要SaaSはすべてプランごとにクォータを明示。契約前に制限値の確認が標準的なプロセスになっている
スロットリングと関連するAPI制御の比較
スロットリングは「流量を制限する」という概念ですが、似た概念と混同しやすいため整理しておきましょう。
主要なSaaSサービスの制限値の例を見ておくと、発注時の確認ポイントがわかります。
| サービス | 制限の例 | 超過時の挙動 |
|---|---|---|
| Slack API | Tier 1: 1 RPM / Tier 4: 100+ RPM | 429を返し、Retry-Afterヘッダーで待機秒数を通知 |
| Google Maps API | QPS制限あり(プランによる) | 429 または OVER_QUERY_LIMIT エラー |
| Salesforce API | プランごとに1日のAPI呼び出し数上限 | REQUEST_LIMIT_EXCEEDEDエラー |
| Stripe API | 100 RPS(テストモードは25 RPS) | 429を返す |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 6585 | 429 Too Many Requests HTTPステータスコードの正式定義 |
| RFC 7231 | HTTPセマンティクス全般(Retry-Afterヘッダーの定義を含む) |
| OpenAPI Specification | APIの仕様記述標準。スロットリング情報を文書化する際に活用される |