API Gateway の概要
ウェブベースのサービスでは、地図、天気予報、画像サービスから、ゲーム、オークション、その他多くのタイプのサービスに至るあらゆるサービスを含む、非常に幅広い機能を提供しています。サービス プロバイダは、サービスの実装、デプロイ、管理のために、多くのオプションを提供しています。たとえば、Java または .NET で開発されるサービスと、Node.js を使用するサービスがあります。
バックエンドの実装は、単一のサービス プロバイダでも異なる場合があります。サービス プロバイダが、1 つのアーキテクチャを使用して実装された従来のサービスと、まったく異なるアーキテクチャを使用して実装された新しいサービスとを保有している場合があります。
実装に関係なく、ウェブベースのサービスには、アプリ デベロッパーがサービスを利用できるようにする方法が必要です。多くの場合、これらのサービスは HTTP エンドポイントのセットとして公開されます。サービスによっては、エンドポイントが、XML または JSON としてフォーマットされたデータをクライアント アプリに返す場合があります。
Google Cloud Platform サービスについて
Google Cloud Platform(GCP)でサービスを開発する場合は、Cloud Run functions、Cloud Run、App Engine スタンダード環境など、サービスの実装方法には多くのオプションがあります。GCP の柔軟性により、サービス要件に適したバックエンド アーキテクチャを選択できます。
アプリ デベロッパーはバックエンド サービスを利用するお客様です。アプリ デベロッパーは、ブラウザで実行されているアプリ、またはサービス リクエストが可能な他の種類のアプリを通じてサービスを使用し、モバイル デバイスやタブレット用のアプリを実装します。
サービスをウェブで公開することが困難な場合があります。成功させるには、サービス プロバイダは次のことを行う必要があります。
- サービスへのアクセスを認証する
- クライアントとサービスの間のデータ転送を保護する
- 悪意のある攻撃からサービスを保護する
- 使用量の増減に応じてサービスをスケーリングする
- バックエンド オペレーション チームに、サービスの使用状況のモニタリングと追跡のための手段を提供する
- 使用状況を追跡して正確な請求情報を提供する
また、サービスで異なるインターフェースやプロトコルを使用する場合、アプリ デベロッパーにとってこれらのサービスへのアクセスは困難になる可能性があります。デベロッパーは、各サービスのインターフェースを学習して理解するだけでなく、さまざまなサービスの変更をモニタリングし、必要に応じてアプリを更新して再デプロイする必要があります。
API ゲートウェイ
API Gateway では、サービスの実装を問わず、すべてのサービスで一貫して明確に定義された REST API を使用して、サービスに安全にアクセスできます。一貫性のある API とは、次のような API のことです。
- アプリ デベロッパーがサービスをより簡単に使用できる
- パブリック API に影響を与えることなく、バックエンド サービスの実装を変更できる
- Google Cloud Platform(GCP)に組み込まれているスケーリング、モニタリング、セキュリティ機能を活用できる
次の図は、アプリ デベロッパーが API Gateway を介してバックエンド サービスにリクエストを送信する方法を示しています。
API Gateway を使用すると、アプリ デベロッパーは REST API を使用してアプリを実装します。すべての API が API Gateway でホストされるため、アプリ デベロッパーはすべてのバックエンド サービスで一貫したインターフェースを使用できます。
API Gateway に API をデプロイすることで、バックエンド サービスを更新できます。また、API を変更することを必要とせずに、あるアーキテクチャから別のアーキテクチャにサービスを移動することもできます。サービスの API の一貫性が維持されている限り、バックエンドの根本的な変更を理由に、アプリ デベロッパーはデプロイ済みのアプリを変更する必要はありません。
API Gateway は、API を作成、共有、維持、保護するためのホスティング、ロギング、モニタリングなどの機能を提供する分散 API 管理システムです。API Gateway は GCP とネイティブに統合されており、トラフィック管理、認可、モニタリングなど、同時実行 API 呼び出しの処理に関連するすべてのタスクを処理します。
API とは
API とは、あるアプリケーションが別のアプリケーションの機能やデータを簡単に「利用」できるようにするインターフェースです。持続性のあるシンプルで文書で十分に裏付けられたエントリ ポイントを定義することで、他のデベロッパーによって構築されたアプリケーション ロジックへのアクセスやそれらの再利用を簡単にします。
たとえば、次の表に、書籍に関する情報を返す REST API の例を示します。
プロパティ | 値 | 説明 |
---|---|---|
URL | https://www.mybooksapi.com/books/info | 国際標準書籍番号(DRM)に基づいて、書籍のタイトル、著者、出版日を返します。 |
HTTP 動詞 | GET | API に対して GET リクエストを行います。 |
Query param | isbn
|
書籍の ISBN 番号を渡します。これは書籍の ID を表します。 |
Response data | { "title" : "book_title", "author" : "author_name", "published" : "publish_date" } |
書籍の詳細を含む JSON オブジェクト。 |
レスポンス コード | 200 | リクエストが正常に処理されました。 |
この情報を使用して、この API に対して次の cURL リクエストを行い、書籍に関する情報を取得できます。
curl -X GET https://www.mybooksapi.com/books/info?isbn=0385504217
このサービスには、データ形式や HTTP レスポンス コードの説明など、明確に定義された API があるため、アプリ デベロッパーはバックエンド サービスの基盤となる実装について何も知らなくても問題ありません。
API を使用するアプリケーションには変更が多発するため、API には API プロバイダと API コンシューマとの契約も含まれています。この契約により、時間の経過とともに API が予測可能な方法で変更されることが保証されます。たとえば、book API を更新して title
や author
などのクエリ パラメータを追加するか、レスポンスの JSON を変更して書籍に関する情報を追加します。
API の定義
API Gateway にデプロイされた API を OpenAPI 2.0 仕様として定義します。API 定義の主なコンポーネントは次のとおりです。
- バックエンド サービスの URL またはエントリ ポイント
- API へのリクエストで渡されるデータのデータ形式
- API からのレスポンスでサービスから返されるデータのデータ形式
- サービスへのアクセス制御に使用される認証メカニズム
API を定義したら、gcloud コマンドライン インターフェースを使用して、GCP の API 構成にアップロードします。
API Gateway への API 構成のデプロイ
API を作成するには、API Gateway に API 構成をデプロイします。gcloud
コマンドを使用して API 構成をデプロイします。
API 構成がデプロイされると、クライアントは API に対して REST 呼び出しを行うことができます。
API の管理
デプロイして実行すると、使用状況の指標やログなどの API アクティビティをモニタリングできます。クライアントが API にリクエストを送信すると、API Gateway はリクエストとレスポンスに関する情報をログに記録します。API Gateway は、レイテンシ、トラフィック、エラーも追跡します。
時間の経過とともに、新しい機能を追加したり、パフォーマンスを改善したり、API の問題を修正したりするために、デプロイされた API を更新することがあります。デプロイされた API を更新するには、API 定義の OpenAPI 仕様を更新し、API をアップロードして再デプロイします。
API アクセスの制御
API Gateway を使用すると、クライアントが API にアクセスする前に認証を要求するように API を構成できます。現在 API Gateway では、以下を含め Cloud Endpoints で使用されているものと同じ認証メカニズムと構文がサポートされています。
また、Google Cloud Platform Console を使用して他のデベロッパーと API を共有すると、共有相手のデベロッパーがその API を有効にして、API を呼び出すための API キーを生成できます。
ユーザーの ID を確認する認証メカニズムを定義するだけでなく、API では、認証されたユーザーが API で実行できる操作を決定する必要があります。詳細については、GCP Auth ガイドをご覧ください。