APIゲートウェイパターン

英語名 API Gateway Pattern
読み方 エーピーアイ ゲートウェイ パターン
難易度
所要時間 30分〜1時間
提唱者 マイクロサービスアーキテクチャ
目次

ひとことで言うと
#

クライアントとマイクロサービス群の間に「玄関口」を1つ置き、ルーティング・認証・レート制限などの横断的関心事を集約するアーキテクチャパターン。サービスが増えてもクライアントは1つのエンドポイントだけを見ればいい。

押さえておきたい用語
#

押さえておきたい用語
API Gateway(エーピーアイ ゲートウェイ)
クライアントからのリクエストを受け取り、適切なバックエンドサービスへ振り分けるリバースプロキシのこと。認証・ログ・レート制限なども担当する。
Cross-Cutting Concerns(横断的関心事)
認証、ログ収集、レート制限のように複数サービスに共通して必要な処理を指す。各サービスに個別実装するとコードが散らばる。
Rate Limiting(レートリミティング)
一定時間内のリクエスト数を制限して過負荷やDDoSからサービスを守る手法。
Request Aggregation(リクエスト アグリゲーション)
クライアントの1回のリクエストを複数のバックエンドサービスに分散して呼び出し、結果を1つのレスポンスにまとめて返す処理。

APIゲートウェイパターンの全体像
#

APIゲートウェイ:クライアントとサービス群の間の統合レイヤー
Web AppブラウザMobile AppiOS / Android3rd Party外部連携API Gateway認証 / 認可レート制限 / ログ収集ルーティング / レスポンス集約User Serviceユーザー管理Order Service注文処理Payment Service決済処理
APIゲートウェイ導入の進め方フロー
1
横断的関心事の棚卸し
認証・ログ・レート制限など各サービスに散在する処理を洗い出す
2
ルーティング設計
URLパス・ヘッダーをもとにどのサービスへ振り分けるか定義
3
ゲートウェイ実装・導入
既存サービスの前段に配置し段階的にトラフィックを切り替え
運用・監視開始
レイテンシとエラー率をモニタリングし継続改善

こんな悩みに効く
#

  • マイクロサービスごとに認証ロジックを実装していて変更が大変
  • クライアントが複数サービスのエンドポイントを直接呼び出していてカオス状態
  • APIのバージョニングやレート制限をサービスごとにバラバラに管理している

基本の使い方
#

横断的関心事を洗い出す

各サービスに重複実装されている処理を一覧化する。典型的なものは以下の通り。

  • 認証・認可(JWTの検証など)
  • レート制限・スロットリング
  • リクエスト/レスポンスのログ収集
  • CORS設定
  • リクエストの変換・バリデーション
ルーティングルールを設計する

URLパスやHTTPメソッドに基づいて、どのバックエンドサービスにリクエストを振り分けるかを定義する。

  • /api/users/* → User Service
  • /api/orders/* → Order Service
  • /api/payments/* → Payment Service
レスポンス集約パターンを検討する
1つの画面表示に複数サービスからのデータが必要な場合、ゲートウェイで集約して返すかどうかを判断する。集約が複雑になりすぎるならBFF(Backends for Frontends)パターンへの分離を検討する。
段階的に移行する
いきなり全トラフィックを切り替えず、まず1つのサービスのルーティングだけをゲートウェイ経由にする。問題がなければ順次追加していく。

具体例
#

例1:ECスタートアップがサービス間の認証を統合する

従業員25名のECスタートアップ。マイクロサービス8つがそれぞれJWT検証ロジックを持っており、認証ライブラリのバージョンが3種類混在していた。セキュリティパッチの適用に毎回2週間かかっていた。

Kong Gatewayを導入し、認証をゲートウェイ層に集約。

指標BeforeAfter
認証ロジックの実装箇所8サービス1箇所(Gateway)
セキュリティパッチ適用2週間半日
認証関連のコード行数約4,800行約600行

サービス側から認証コードを削除できたことで、各チームはビジネスロジックに集中できるようになった。

例2:金融系SaaSがAPIレート制限を一元管理する

月間API呼び出し2億件の金融データプラットフォーム。プランごとのレート制限を各サービスに個別実装しており、プラン変更のたびに5サービスを同時デプロイする必要があった。

AWS API Gatewayを採用し、Usage Planでプランごとのレート制限を一元管理。

設計のポイント

  • Free: 100 req/min、Standard: 1,000 req/min、Enterprise: 10,000 req/min
  • レート超過時のレスポンス(429)もゲートウェイで統一
  • API Keyの発行・管理もゲートウェイに集約

プラン変更がゲートウェイの設定変更だけで完結するようになり、リリースサイクルが 月1回 → 随時 に短縮された。

例3:地方自治体がレガシーAPIの段階的な移行に活用する

人口20万人規模の自治体。住民向けポータルのバックエンドがCOBOL時代のSOAP APIで、モバイルアプリ対応が求められていた。

全面リプレースではなく、APIゲートウェイを前段に配置してSOAP→REST変換を行う戦略を採用。

  • フェーズ1: ゲートウェイで住民情報取得APIだけをREST化(2ヶ月)
  • フェーズ2: 届出・申請系APIをREST化(4ヶ月)
  • フェーズ3: 新規機能はマイクロサービスとして追加

レガシーシステムに手を入れずにモバイルアプリをリリースでき、開発期間は全面リプレース案の 18ヶ月 → 6ヶ月 に短縮。

やりがちな失敗パターン
#

  1. ゲートウェイにビジネスロジックを入れてしまう — ゲートウェイはルーティングと横断的関心事だけに徹する。ビジネスロジックを入れると「賢すぎるパイプ」になり、変更のボトルネックになる
  2. 単一障害点への対策を怠る — ゲートウェイが落ちると全サービスが止まる。冗長化・ヘルスチェック・自動フェイルオーバーは導入時に必ず設計する
  3. レスポンス集約をやりすぎる — ゲートウェイで多くのサービスを呼び出して結果を合成すると、レイテンシが加算的に増える。複雑な集約が必要ならBFFパターンに分離する
  4. 全サービスを一度に切り替える — 段階的に移行しないと、問題発生時の切り分けが困難になる。1サービスずつ切り替えて動作確認するのが鉄則

まとめ
#

APIゲートウェイパターンは、マイクロサービスの 「玄関口」 を統一することで、認証・レート制限・ログなどの横断的関心事を一箇所にまとめる設計手法。クライアントはサービス構成を意識せずに1つのエンドポイントを叩くだけでよくなり、サービス側はビジネスロジックに集中できる。ただし単一障害点になりうるため冗長化は必須で、ビジネスロジックを入れない規律も求められる。