API Gateway の概要
ウェブベースのサービスでは、地図、天気予報、画像サービスから、ゲーム、オークション、その他多くのタイプのサービスに至るあらゆるサービスを含む、非常に幅広い機能を提供しています。サービス プロバイダは、サービスの実装、デプロイ、管理のために、多くのオプションを提供しています。たとえば、Java または .NET で開発されるサービスと、Node.js を使用するサービスがあります。
バックエンドの実装は、単一のサービス プロバイダごとに異なる場合もあります。サービス プロバイダが、1 つのアーキテクチャを使用して実装された従来のサービスと、まったく異なるアーキテクチャを使用して実装された新しいサービスとを保有している場合があります。
実装にかかわらず、ウェブベースのサービスはすべて、アプリ デベロッパーがサービスを利用できるようにする必要があります。多くの場合、これらのサービスは一連の HTTP エンドポイントとして公開されます。サービスによっては、エンドポイントが、XML または JSON としてフォーマットされたデータをクライアント アプリに返す場合があります。
Google Cloud Platform サービスについて
Google Cloud Platform(GCP)でサービスを開発する場合は、Cloud 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 コマンドライン インターフェースを使用して API を GCP の API 構成にアップロードします。
API Gateway への API 構成のデプロイ
API を作成するには、API 構成を API Gateway にデプロイします。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 を使用して実行できる操作を決定する必要もあります。詳細については、GCP Auth ガイドをご覧ください。