APIゲートウェイとは?
APIゲートウェイとはクライアントとバックエンドサービスのコレクションの間に位置するAPIへアクセスするためのドアのことであり、複雑なAPIの呼び出しや複数のサービス間のアクセスなどを容易にするための仕組みです。
APIゲートウェイを構築するには、自作するほか、AWS API GatewayやGCP Cloud Endpointsなどのクラウドサービスや製品群を利用する方法があります。
APIゲートウェイで解決できる課題
①クライアントから多数のAPIを呼び出していて処理が遅い
API内部で必要なAPIを順番に呼ぶことで、ライアントに最適化した形式に変換する。
クライアントに応じて最適化するのでPCやスマホで画面が異なる場合はそれぞれで最適化することもあります。
また、レスポンスをキャッシュするAPI ゲートウェイを用い、余計なバックエンドへのリクエストを抑制する方法などもあります。
②API毎に認証キーや型(JSON/XML)が異なるため開発コストが高い
クライアントはAPI毎に異なる認証方法を解決しなければならない。また、レスポンスの形式もことなるため、別途解析処理を実装する必要がありコストがかかる
データ変換用のAPIゲートウェイを構築することで、クライアントは同じ認証方式・データ型のアクセスを行うことができ、開発コストの削減につながります。
③APIを公開したいがレガシーシステムのため改修コストが膨大にかかる
クラウド移行できてないようなレガシーシステムで運用しているAPIは、そのまま一般公開が難しい。
また、社内システムが利用している場合は障害の影響が広がり事業が継続できなくなり危険もある。
APIを一般公開するまでの改修コストが高くなりがち。
APIゲートウェイで一般公開用のインターフェースを構築しつつ、リクエストの流量を制御することで、レガシーAPIを守ります。
他にも、マイクロサービスのためアーキテクチャがバラバラで分析しづらい時など、APIゲートウェイの活用が有効な場面が多々あります。
APIゲートウェイの構築方法
①製品(OSS)/サービスを使用する
AWS API GatewayやGCP Cloud Endpointsなどのクラウドサービスや、Kong、Tyk、Zuuなど製品(OSS)を利用する方法で、一番おすすめできます。
メリット
- 構築(実装)のコストが必要ない
- 法人サポートがある場合乗っかれる
- 独自拡張(世のAPIとの乖離)を防げる
- API ゲートウェイが優位に立てる
- 製品によっては周辺ツールが充実している
デメリット
- 自社の独自規格に合わない
- 英語のドキュメントにアレルギーがある
- 製品によってはカスタマイズできない
- セット売りや毎年のライセンス料等、ランニングコストが発生する
②製品(OSS)/サービスをカスタマイズする
メリット
- スクラッチで開発するより構築コストが安い
- ある程度の要望には答えられる
- 法人サポートがある場合乗っかれる
- 製品によっては周辺ツールが充実している
デメリット
- 自社の独自規格に合わない
- 英語のドキュメントにアレルギーがある
- 製品によってカスタマイズ性の幅がある
- なにかしらの制限が発生する(例: タイムアウトは30秒まで…etc)
- セット売りや毎年のライセンス料等、ランニングコストが発生する
③APIゲートウェイを自作する
メリット
- どんな要望にも答えられる
デメリット
- 開発コストが発生
- 工数感や構築の難易度はどんな課題を解決したいかによる
- バグ、障害、脆弱性の対応が必要
- 障害が発生してはいけないAPIがある場合は24時間対応が必須になる
- 周辺ツールも自作が必要(データメンテ、プロビジョニング等)
- API ゲートウェイの開発や改修がボトルネックになり、ビジネスが遅くなるリスク
APIゲートウェイ事例
APIゲートウェイの導入成功事例をご紹介します。
今までの課題
各大学ごとにゲノム解析のAPIがあったが、形式が統一されてなく探し出すのが大変であった。
研究者がゲノム情報を調べたい時、色々な大学に問い合わせが必要であり時間と手間がかかっていた。
対策
API ゲートウェイで大学のゲノム情報を横断的に検索して結果を返すに対応
研究者は横断検索画面で検索するだけで欲しい情報が手に入るようになった。
APIゲートウェイを上手く活用する
APIゲートウェイは必ずしも、良い事ばかりではありません。
クライアントからの要望(カスタマイズ)が頻繁にある場合など、APIゲートウェイの改修コストがかえって高くつく場合があります。また、APIゲートウェイをいくつも経由してレイテンシーが増大するケースもあります。
APIゲートウェイは要所要所に上手く活用し、処理コスト・開発コストの低減などを実現させることが重要です。