メニュー
Amazon API Gateway
開発者ガイド

HTTP プロキシ統合で API をビルドする

API Gateway の HTTP プロキシ統合は、API を構築するシンプルかつパワフルで、汎用性のあるメカニズムです。これにより、単一の API メソッドのセットアップを合理化することで、ウェブアプリケーションから、統合された HTTP エンドポイントの複数のリソースや機能 (例: ウェブサイト全体) にアクセスすることができます。HTTP プロキシ統合で、API Gateway はクライアントが送信したメソッドリクエストをバックエンドに渡します。渡されるリクエストデータには、リクエストヘッダー、クエリ文字列パラメータ、URL パス変数、ペイロードなどが含まれます。バックエンド HTTP エンドポイントまたはウェブサーバーでは、受信リクエストデータを解析して、返すレスポンスを決定します。ある意味で、HTTP プロキシ統合では、クライアントとバックエンドは、API メソッドのセットアップ後、API Gateway を呼び出すことなく、直接操作することができます。

また、網羅的なプロキシリソース ({proxy+}) と、多様な状況に対応できる HTTP メソッドの ANY 動詞を使用すれば、HTTP プロキシ統合を使用して、単一の API メソッドの API を作成することができます。このメソッドでは、ウェブサイトのパブリックにアクセス可能な HTTP リソースとオペレーションのセット全体を公開します。バックエンドのウェブサーバーでパブリックアクセス用のリソースが他にも開かれると、クライアントは、同じ API をセットアップしてこれらの新しいリソースを使用できます。このようにするために、ウェブサイト開発者は、適用可能な新しいリソースやオペレーションについて、クライアント開発者に明確に伝える必要があります。

以下のチュートリアルでは、HTTP プロキシ統合の概要について説明します。このチュートリアルでは、API Gateway コンソールを使用して API を作成し、汎用的なプロキシリソース ({proxy+}) から PetStore ウェブサイトと統合し、ANY の HTTP メソッドのプレースホルダーを作成します。

API Gateway コンソールを使用して HTTP プロキシ統合で API を作成する

次の手順では、API Gateway コンソールを使用して、HTTP バックエンド用の API と プロキシリソース を作成してテストする方法を説明します。HTTP バックエンドは、HTTP カスタム統合で API をビルドするPetStore ウェブサイト (http://petstore-demo-endpoint.execute-api.com/) です。ここでは、スクリーンショットを視覚的な補助として使用し、API Gateway UI 要素を示します。はじめて API Gateway コンソールを使用して API を作成する場合は、まず該当セクションに従って行います。

プロキシリソースを通じて PetStore ウェブサイトとの HTTP プロキシ統合で API を構築するには

  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. API を作成するには、[Create new API] (最初の API を作成する場合)または [Create API] (以降の API を作成する場合)を選択します。次に、以下の手順を実行します。

    1. [New API] を選択します。

    2. [API Name] に名前を入力します。

    3. 必要に応じて、[Description] に短い説明を 入力します。

    4. [Create API] を選択します。

    このチュートリアルでは、API 名として ProxyResourceForPetStore を使用します。

  3. 子リソースを作成するには、[Resources] ツリーで親リソース項目を選択し、[Actions] ドロップダウンメニューから [Create Resource] を選択します。次に、[New Child Resource] ペインで次の操作を行います。

    1. プロキシリソースを作成するには、[Configure as proxy resource] オプションを選択します。それ以外の場合は、選択しないままにします。

    2. [Resource Name*] テキスト入力フィールドに名前を入力します。

    3. [Resource Path*] テキスト入力フィールドで、新しい名前を入力するか、デフォルト名を使用します。

    4. [Create Resource] を選択します。

    5. 必要に応じて、[Enable API Gateway CORS] を選択します。

    このチュートリアルでは、[Configure as proxy resource] を選択します。[Resource Name] は、デフォルトの proxy を使用します。[Resource Path] には /{proxy+} を使用します。[Enable API Gateway CORS] を選択します。

     子リソースを作成します。
  4. HTTP バックエンドとの統合用に ANY メソッドを設定するには、次の操作を行います。

    1. [Integration type] として [HTTP Proxy] を選択します。

    2. [Endpoint URL] に HTTP バックエンドのリソース URL を入力します。

    3. [Save] を選択して ANY メソッドの設定を終了します。

    このチュートリアルでは、[Endpoint URL] として http://petstore-demo-endpoint.execute-api.com/{proxy} を使用します。

     ANY メソッドをセットアップします。

作成した API では、API の プロキシリソース パス ({proxy+}) が、http://petstore-demo-endpoint.execute-api.com/ にある任意のバックエンドのエンドポイントを表すプレースホルダーになります。たとえば、petstorepetstore/petspetstore/pets/{petId} のようになります。ANY メソッドは、実行時に、サポートされる HTTP 動詞のプレースホルダーとして機能します。

HTTP プロキシ統合で API をテストする

特定のクライアントリクエストが成功するかは次に応じて異なります。

  • バックエンドで、対応するバックエンドポイントエンドポイントが利用可能になった場合、または利用可能である場合は、必要なアクセス許可が付与されます。

  • クライアントから適切に入力が行われる場合。

たとえば、ここで使用した PetStore API には、/petstore リソースは表示されません。そのため、取得するレスポンス (404 Resource Not Found) には、エラーメッセージ (Cannot GET /petstore) が含まれます。

さらに、クライアントは、結果を正しく処理するために、バックエンドの出力形式を処理できるようにする必要があります。クライアントとバックエンドの間のやり取りを容易にするために API Gateway が仲介することはありません。

プロキシリソースを通じた HTTP プロキシ統合を使用して PetStore ウェブサイトと統合された API をテストするには

  1. API Gateway コンソールで API の呼び出しをテストするには、次の操作を行います。

    1. [Resources] ツリーで プロキシリソース の [ANY] を選択します。

    2. [Method Execution] ペインの [Test] を選択します。

    3. [Method] ドロップダウンリストから、バックエンドでサポートされる HTTP 動詞を選択します。

    4. [Path] で、選択したオペレーションをサポートする特定の プロキシリソース パスを入力します。

    5. 必要に応じて、[Query Strings] で、選択したオペレーションの該当するクエリ式を入力します。

    6. 必要に応じて、[Headers] で、選択したオペレーションの該当するヘッダー式を 1 つ以上入力します。

    7. 設定する場合、[Stage Variables] で、選択したオペレーションの必須のステージ変数値を設定します。

    8. プロンプトが表示された場合は、必要に応じて [Client Certificate] で、バックエンドで認証するオペレーションに対して API Gateway で生成されたクライアント証明書を選択します。

    9. プロンプトが表示された場合は、[Request Body] で、テキストエディターの適切なリクエスト本文を入力します。

    10. [Test] を選択してメソッドの呼び出しをテストします。

    このチュートリアルでは、[Method] として、ANY の代わりに GET、[Path] として、プロキシリソース パス ({proxy}) の代わりに petstore/pets、[Query Strings] として type=fish を使用します。

     メソッドをテストします。

    バックエンドのウェブサイトは、GET /petstore/pets?type=fish リクエストをサポートするため、次のような成功のレスポンスを返します。

    Copy
    [ { "id": 1, "type": "fish", "price": 249.99 }, { "id": 2, "type": "fish", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

    GET /petstore を呼び出そうとすると、404 レスポンスとエラーメッセージ Cannot GET /petstore が返されます。これは、指定したオペレーションがバックエンドでサポートされていないためです。GET /petstore/pets/1 を呼び出すと、リクエストは PetStore ウェブサイトでサポートされているため、200 OK レスポンスと次のペイロードが返されます。

    Copy
    { "id": 1, "type": "dog", "price": 249.99 }
  2. ブラウザを使用して API の特定のリソースに対して GET メソッドを呼び出すには、次の操作を行います。

    1. 作成した API に対して、[Actions] ドロップダウンメニューから [Deploy API] を選択します (まだ選択していない場合)。API を特定のステージにデプロイするための手順に従います。最後に [Stage Editor] ページに [Invoke URL] が表示されることを確認します。これは API のベース URL です。

    2. 特定のリソースに対する GET リクエストを送信するには、前のステップで取得した [Invoke URL] の値に対して該当するクエリ文字列式を含むリソースパスを追加し、その URL 全体をブラウザのアドレスバーにコピーして Enter を選択します。

    このチュートリアルでは、API を test ステージにデプロイし、petstore/pets?type=fish を API の呼び出し URL に追加します。これにより、https://4z9giyi2c1.execute-api.us-west-2.amazonaws.com/test/petstore/pets?type=fish という URL が生成されます。

    この結果は、API Gateway コンソールから TestInvoke を使用したときに返される結果と同じです。