チュートリアル: HTTP プロキシ統合を使用して REST API をビルドする - Amazon API Gateway

チュートリアル: HTTP プロキシ統合を使用して REST API をビルドする

注記

API Gateway コンソールの設計を変更しました。古いコンソールエクスペリエンスは、2023 年 12 月から利用できなくなります。コンソールを使用して REST API を作成する方法については、「REST API コンソールの開始方法」を参照してください。

HTTP プロキシ統合は、API を構築するシンプルかつパワフルで、汎用性のあるメカニズムです。これにより、単一の API メソッドのセットアップを合理化することで、ウェブアプリケーションから、統合された HTTP エンドポイントの複数のリソースや機能 (例: ウェブサイト全体) にアクセスすることができます。HTTP プロキシ統合で、API Gateway はクライアントが送信したメソッドリクエストをバックエンドに渡します。渡されるリクエストデータには、リクエストヘッダー、クエリ文字列パラメータ、URL パス変数、ペイロードなどが含まれます。バックエンド HTTP エンドポイントまたはウェブサーバーでは、受信リクエストデータを解析して、返すレスポンスを決定します。HTTP プロキシ統合では、API メソッドの設定後に API Gateway からの介入なしで、クライアントとバックエンドが直接やり取りできます (「Amazon 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 バックエンドは、PetStorehttp://petstore-demo-endpoint.execute-api.com/petstore/pets ウェブサイト (チュートリアル: HTTP 非プロキシ統合を使用して REST API をビルドする) です。ここでは、スクリーンショットを視覚的な補助として使用し、API Gateway UI 要素を示します。はじめて API Gateway コンソールを使用して API を作成する場合は、まず該当セクションに従って行います。

プロキシリソースを通じて PetStore ウェブサイトとの HTTP プロキシ統合で API をビルドするには
  1. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  2. API Gateway を初めて使用する場合は、サービスの特徴を紹介するページが表示されます。[REST API] で、[構築] を選択します。[Create Example API (サンプル API の作成)] がポップアップ表示されたら、[OK] を選択します。

    API Gateway を使用するのが初めてではない場合、[Create API] (API を作成)を選択します。[REST API] で、[構築] を選択します。

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

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

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

    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. [リソースの作成] を選択します。

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

    このチュートリアルでは、[Configure as proxy resource (プロキシリソースとして設定)] を選択します。[リソース名] は、デフォルトの proxy を使用します。[リソースパス] には /{proxy+} を使用します。[Enable API Gateway CORS (API Gateway CORS を有効にする)] を選択します。

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

    1. 先ほど作成されたリソースを選択し、[Actions] ドロップダウンメニューから [Create Method] を選択します。

    2. HTTP メソッドのドロップダウンリストから [ANY] を選択し、チェックマークアイコンを選択して選択内容を保存します。

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

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

    5. その他のフィールドについては、デフォルトの設定を使用します。

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

    このチュートリアルでは、[エンドポイント 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] を選択してメソッドの呼び出しをテストします。

    このチュートリアルでは、[メソッド] として、GET の代わりに ANY、[パス] として、 プロキシリソースパス ({proxy}) の代わりに petstore/pets、[クエリ文字列] として type=fish を使用します。

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

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

    [ { "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 レスポンスと次のペイロードが返されます。

    { "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 を使用したときに返される結果と同じです。