コンテンツにスキップ

APIゲートウェイ領域@マイクロサービスアーキテクチャ

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. APIゲートウェイ

APIゲートウェイとは

microservices_api-gateway-pattern

クリーンアーキテクチャでいうインフラ層とインターフェース層のような機能を担う。

主要な機能として、受信した通信を適切なマイクロサービスのAPIにルーティング

  • ルーティング
  • 認証
  • トレースIDの付与
  • キャッシュの作成
  • リクエストのレートリミット
  • 通信の暗号化
  • ...

なお、APIゲートウェイをサービスメッシュに参加させることで、これらの機能の一部 (認証、トレースIDの付与、通信の暗号化、リクエスト制限) をサイドカーに委譲できる。


分割パターン

▼ APIゲートウェイの分割パターンとは

APIゲートウェイの責務をどのように分割するかに応じて、分割パターンがある。

▼ Central Aggregating Gateway

マイクロサービスにリクエストを送信するアプリケーションの種類に関係なく、APIゲートウェイを1個だけ作成する。

apigateway_public-api-pattern

▼ BFF:Backends For Frontends

マイクロサービスにリクエストを送信するクライアントアプリケーションの種類 (Webアプリケーション、モバイルアプリケーション、他社向けアプリケーションなど) を単位として、APIゲートウェイ (Web APIゲートウェイ、Mobile APIゲートウェイ、他社向けAPIゲートウェイなど) を作成する。

ただし、ドメインによっては同じクライアントアプリケーションの種類であっても、APIゲートウェイを分割することもある。

例えば、送金ドメインであれば、クライアントアプリケーションには銀行ダイレクトアプリや銀行系決済サービスアプリがあり、これらが同じモバイルアプリケーションであっても、APIゲートウェイを分割する。

なお、BFFはRESTful-APIであってもGraphQL-APIであっても、どちらでも問題ない。

apigateway_bff-pattern

▼ Federated Gateway

BFFではアプリケーションの種類ごとにAPI Gatewayを作成したが、Federated Gatewayでは各APIゲートウェイのエンドポイントを統合する。


API形式パターン

▼ APIゲートウェイのAPI形式パターンとは

APIゲートウェイのAPI形式に応じて、分割パターンがある。

▼ RESTful-API

記入中...

▼ GraphQL-API

記入中...

▼ RPC-API

記入中...


責務パターン

▼ Gateway Offloadingパターン

APIゲートウェイは、マイクロサービス間で共通する課題 (認証、ロギング、SSL証明書など) を処理する責務を持ちます。

▼ Gatewayルーティングパターン

APIゲートウェイは、複数のマイクロサービスにリクエストをルーティングする責務を持ちます。

▼ Gatewayアグリゲーターパターン

APIゲートウェイにAPI Compositionを適用した方法である。


実装パターン

▼ 自前で実装する場合

APIゲートウェイを自前 (例:フルスクラッチ、GraphQLを使用したフルスクラッチなど) で実装する。

Kubernetes内で管理できるメリットがある。

GraphQLでAPIゲートウェイを実装する場合は、特に注意が必要である。

フロントエンドとAPIゲートウェイの両方でGraphQL特有の実装が必要になるので、フロントエンドとAPIゲートウェイの開発が分業にしくくなってしまう。

ただ、フロントエンドとAPIゲートウェイの開発チームの両方がGraphQLの知識を持ってれば、これは起こらない。

▼ OSSを使用する場合

APIゲートウェイのOSS (Kong、Tyk、Apigee、Kuma、Nginx、Envoy、Apache APISIXなど) を使用する。

Kubernetes内で管理できるメリットがある。

▼ クラウドプロバイダーのマネージドサービスを使用する場合

クラウドプロバイダー (例:AWS、Google Cloud) が提供するAPIゲートウェイ (例:AWS API Gateway、Google API Gateway) を使用する。

クラウドプロバイダーの対応状況によっては、Kubernetes内で管理できない可能性がある。

その場合、フロントエンドアプリケーションがAPIゲートウェイに通信できるように、フロントエンドアプリケーションとバックエンドアプリケーションを異なるKubernetesで動かす必要がある。


02. APIアグリゲーション層

APIアグリゲーション層とは

全てのAPIまたは複数のAPIのセットとして機能する。