APIゲートウェイは、マイクロサービスアーキテクチャにおける玄関口をしっかりとガードしてくれる「関所」の役割を担ってくれます。また、「関所」機能以外にも、ユーザエクスペリエンスの向上にも寄与する役目も果たします。 本記事では、APIゲートウェイを設置する設計手法である、API Gateway パターンに関して、できるだけわかりやすく説明していきたいと思います。
API Gateway パターンとは?
API Gateway パターンの概要
クライアントとバックエンドのサービスの間に玄関口となるAPIゲートウェイを置くのが、API Gateway パターンです。
APIゲートウェイ
API Gateway パターンの何がすごいのか?
APIゲートウェイが、システムの「関所」としての役割を一手に引き受ける
古今東西、交通の要所となる場所に「関所」が設置されてきました。人間が行き来できる道を限定的にすることで、検問、徴税などをより効果的に、より効率的に行うためです。 マイクロサービスアーキテクチャにおけるAPIゲートウェイも同じです。マイクロサービスへの玄関口(エントリポイント)をAPIゲートウェイが提供します。そして、APIゲートウェイが以下の役割を一手に引き受けることで、より効率的に、より効果的にセキュリティ等の役割を担うのです。
- リクエストのルーティング
- 認証・認可
- モニタリング
- 流量制限
- 課金
- プロトコル変換
もし、APIゲートウェイがなければ、どうなるでしょうか? 外部にさらされるエントリポイントが多くなり、攻撃者にも攻撃できる手数を増加させてしまい、セキュリティリスクが高まります。 また、エントリポイントごとに、セキュリティの対策が必要になり、開発者は、サービス本来の仕事に集中できなくなり、開発組織のアジリティもさげることになるでしょう。
APIゲートウェイがない場合
APIゲートウェイ のエントリポイントの抽象化により、変更に強くなる
APIゲートウェイ のエントリポイントは、ラーメン屋のセットメニューのようです。 「味噌ラーメンでトッピングはネギとコーンとチャーシュー。あと餃子と半チャーハン」のように注文するのではなく「満腹味噌ラーメンセット」と注文すれば、すべてまとまってできあがってくるのです。
APIゲートウェイのエントリポイントは、そのような粒度の粗いリクエストを受け付けるようにするのです。 このことにより、バックエンド側の個々のサービスの詳細がカプセル化されているので、多少の変更では、クライアント側への影響が発生しづらくなります。 例えば、「満腹味噌ラーメンセット」のネギをバターに変更したとしても、「満腹味噌ラーメンセット」というメニューの名称は変えなくてもいいでしょう。 これと同じように、カプセル化により、バックエンド側の変更の影響がクライアント側に伝わりにくくなります。
ラウンドトリップ減少によるユーザエクスペリエンスの向上
APIゲートウェイ のエントリポイントを抽象化することで、ユーザエクスペリエンスも向上します。 もし、クライアントが各サービスから必要な情報を集めて、最終的にクライアントで情報を組み立てるようになるとどうでしょうか?比較的通信速度も遅くなるクライアントとバックエンド側とのやりとりが多くなり、それだけ、最終的にユーザへの応答の遅延が大きくなってしまいます。 シーケンス図 APIゲートウェイがない場合
しかし、クライアントとバックエンド側のやりとりを最小限にすることで、結果的にユーザへの応答が早くなり、ユーザエクスペリエンスの向上につながるのです。
シーケンス図 APIゲートウェイがある場合
上記を実現するために、APIゲートウェイでは、複数のサービスへのリクエストを集約する仕組みが必要になります。 その仕組みをAPI合成(API Composition)と呼びます。
APIゲートウェイの実装は
パブリッククラウドベンダー
各パブリッククラウドベンダーからAPIゲートウェイ製品が提供されています。
オープンソースパッケージ
オープンソースパッケージで、APIゲートウェイ製品が提供されています。
- Kong
- Traefik
- Ocelot
フレームワーク
APIゲートウェイを自作するためのフレームワークには、以下のようなものがあります。
結局、APIゲートウェイとは?
APIゲートウェイとは、システムの表玄関である。つまり、関所としての役割を担う他に、ユーザに価値をもたらすレベルの公開サービスの陳列棚でもある。 マイクロサービスアーキテクチャが成長する中で、開発組織にアジリティをもたらしてくれる存在である。
参考
- マイクロサービスアーキテクチャにおけるAPIコールの仕方とHTMLレンダリング - Qiita
API合成に関して、わかりやすい図があります。 - Kong vs Traefik | What are the differences?
APIゲートウェイのオープンソース Kong と Traefik の比較 - API gateway pattern
マイクロサービスパターンの著者Chris RichardsonのAPIゲートウェイ, Backend for Front-Endの説明 - 【AWS Black Belt Online Seminar】Amazon API Gateway
「Amazon API Gateway」の説明動画。数少ない APIゲートウェイ の日本語の動画。 - API ゲートウェイ パターンと、クライアントからマイクロサービスへの直接通信との比較 | Microsoft Docs
マイクロサービス における APIゲートウェイ パターンに関する詳細な記事。なぜ、APIゲートウェイが必要なのかが理解できる。 - マイクロサービス実践講座 - API Gatewayの活用
マイクロサービス における APIゲートウェイ の説明。わかりやすく、かつ、充実している。 - D1-4-S02: メルペイのマイクロ サービスを支える GKE と Cloud Spanner
マイクロサービス の導入事例。メルペイでは、Google Kubernetes Engine( GKE )と Cloud Spanner をインフラとして採用している。設計パターンとして登場するのは、「API Gateway( APIゲートウェイ )」。