すごいよ、API Gateway
※本記事は、2020年7月に個人ブログ「ふじやまエッグのブリコルール日誌」に初出したものを、ブログ閉鎖にともない一部加筆・修正のうえ、こちらに転載したものです。

APIゲートウェイは、マイクロサービスアーキテクチャにおける玄関口をしっかりとガードしてくれる「関所」の役割を担ってくれます。また、「関所」機能以外にも、ユーザエクスペリエンスの向上にも寄与する役目も果たします。
本記事では、APIゲートウェイを設置する設計手法である、API Gateway パターンに関して、できるだけわかりやすく説明していきたいと思います。
API Gateway パターンとは?
API Gateway パターンの概要
クライアントとバックエンドのサービスの間に玄関口となるAPIゲートウェイを置くのが、API Gateway パターンです。

API Gateway パターンの何がすごいのか?
APIゲートウェイが、システムの「関所」としての役割を一手に引き受ける
古今東西、交通の要所となる場所に「関所」が設置されてきました。人間が行き来できる道を限定的にすることで、検問、徴税などをより効果的に、より効率的に行うためです。
マイクロサービスアーキテクチャにおけるAPIゲートウェイも同じです。マイクロサービスへの玄関口(エントリポイント)をAPIゲートウェイが提供します。そして、APIゲートウェイが以下の役割を一手に引き受けることで、より効率的に、より効果的にセキュリティ等の役割を担うのです。
- リクエストのルーティング
- 認証・認可
- モニタリング
- 流量制限
- 課金
- プロトコル変換
もし、APIゲートウェイがなければ、どうなるでしょうか?
外部にさらされるエントリポイントが多くなり、攻撃者にも攻撃できる手数を増加させてしまい、セキュリティリスクが高まります。
また、エントリポイントごとに、セキュリティの対策が必要になり、開発者は、サービス本来の仕事に集中できなくなり、開発組織のアジリティもさげることになるでしょう。

APIゲートウェイ のエントリポイントの抽象化により、変更に強くなる
APIゲートウェイ のエントリポイントは、ラーメン屋のセットメニューのようです。
「味噌ラーメンでトッピングはネギとコーンとチャーシュー。あと餃子と半チャーハン」のように注文するのではなく「満腹味噌ラーメンセット」と注文すれば、すべてまとまってできあがってくるのです。
APIゲートウェイのエントリポイントは、そのような粒度の粗いリクエストを受け付けるようにするのです。
このことにより、バックエンド側の個々のサービスの詳細がカプセル化されているので、多少の変更では、クライアント側への影響が発生しづらくなります。
例えば、「満腹味噌ラーメンセット」のネギをバターに変更したとしても、「満腹味噌ラーメンセット」というメニューの名称は変えなくてもいいでしょう。
これと同じように、カプセル化により、バックエンド側の変更の影響がクライアント側に伝わりにくくなります。
ラウンドトリップ減少によるユーザエクスペリエンスの向上
APIゲートウェイ のエントリポイントを抽象化することで、ユーザエクスペリエンスも向上します。
もし、クライアントが各サービスから必要な情報を集めて、最終的にクライアントで情報を組み立てるようになるとどうでしょうか?比較的通信速度も遅くなるクライアントとバックエンド側とのやりとりが多くなり、それだけ、最終的にユーザへの応答の遅延が大きくなってしまいます。

しかし、クライアントとバックエンド側のやりとりを最小限にすることで、結果的にユーザへの応答が早くなり、ユーザエクスペリエンスの向上につながるのです。

上記を実現するために、APIゲートウェイでは、複数のサービスへのリクエストを集約する仕組みが必要になります。
その仕組みをAPI合成(API Composition)と呼びます。
APIゲートウェイの実装は
パブリッククラウドベンダー
各パブリッククラウドベンダーからAPIゲートウェイ製品が提供されています。
オープンソースパッケージ
オープンソースパッケージで、APIゲートウェイ製品が提供されています。
- Kong
- Traefik
- Ocelot
フレームワーク
APIゲートウェイを自作するためのフレームワークには、以下のようなものがあります。
結局、APIゲートウェイとは?
APIゲートウェイとは、システムの表玄関である。つまり、関所としての役割を担う他に、ユーザに価値をもたらすレベルの公開サービスの陳列棚でもある。
マイクロサービスアーキテクチャが成長する中で、開発組織にアジリティをもたらしてくれる存在である。
参考
-
[https://qiita.com/kawasima/items/356d54e253c54d730fb0:title]
API合成に関して、わかりやすい図があります。 -
[https://stackshare.io/stackups/kong-vs-traefik:title]
APIゲートウェイのオープンソース Kong と Traefik の比較 -
[https://microservices.io/patterns/apigateway.html:title]
マイクロサービスパターンの著者Chris RichardsonのAPIゲートウェイ, Backend for Front-Endの説明 -
【AWS Black Belt Online Seminar】Amazon API Gateway
「Amazon API Gateway」の説明動画。数少ない APIゲートウェイ の日本語の動画。 -
[https://docs.microsoft.com/ja-jp/dotnet/architecture/microservices/architect-microservice-container-applications/direct-client-to-microservice-communication-versus-the-api-gateway-pattern:title]
マイクロサービス における APIゲートウェイ パターンに関する詳細な記事。なぜ、APIゲートウェイが必要なのかが理解できる。 -
[https://www.slideshare.net/TomohiroKada1/api-gateway-77600923:title]
マイクロサービス における APIゲートウェイ の説明。わかりやすく、かつ、充実している。 -
D1-4-S02: メルペイのマイクロ サービスを支える GKE と Cloud Spanner
マイクロサービス の導入事例。メルペイでは、Google Kubernetes Engine( GKE )と Cloud Spanner をインフラとして採用している。設計パターンとして登場するのは、「API Gateway( APIゲートウェイ )」。
Discussion