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

API Gateway API のリクエストパラメーターをマッピングする

このウォークスルーでは、メソッドリクエストパラメーターを、API Gateway API 用の該当する統合リクエストパラメーターにマッピングする方法を説明します。HTTP 統合を使用してサンプル API を作成し、これを使用して、API Gateway でメソッドリクエストパラメーターを該当する統合リクエストパラメーターにマッピングし、以下のパブリックにアクセス可能な HTTP エンドポイントにアクセスする方法を示します。

Copy
http://petstore-demo-endpoint.execute-api.com/petstore/pets

上記の URL をコピーする場合は、ウェブブラウザのアドレスバーに貼り付け、Enter または Return キーを押すと、次の JSON 形式のレスポンス本文が取得されます。

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

上記のエンドポイントは、type および page の 2 つのクエリパラメーターを受け取ることができます。たとえば、上記の URL を次のように変更するとします。

Copy
http://petstore-demo-endpoint.execute-api.com/petstore/pets?type=cat&page=2

この場合、猫のみを表示する 2 ページを表示する、次の JSON 形式のレスポンスペイロードを受け取ります。

Copy
[ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]

このエンドポイントは、URL パスパラメーターで表示されるように、項目 ID の使用もサポートします。たとえば、次を参照する場合:

Copy
http://petstore-demo-endpoint.execute-api.com/petstore/pets/1

次のように、項目に関する JSON 形式の情報が ID 1 とともに表示されます。

Copy
{ "id": 1, "type": "dog", "price": 249.99 }

サポートする GET オペレーションに加えて、このエンドポイントはペイロードで POST も受け取ります。たとえば、Postman を使用して、POST メソッドリクエストを次の場所に送信するとします。

Copy
http://petstore-demo-endpoint.execute-api.com/petstore/pets

ヘッダー Content-type: application/json と次のリクエスト本文を含めます。

Copy
{ "type": "dog", "price": 249.99 }

この場合、レスポンス本文で次の JSON オブジェクトを受け取ります。

Copy
{ "pet": { "type": "dog", "price": 249.99 }, "message": "success" }

ここで、この PetStore ウェブサイトの HTTP 統合を使用して API Gateway API を作成して、これらの機能やその他の機能を公開します。タスクには次のものが含まれています。

  • http://petstore-demo-endpoint.execute-api.com/petstore/pets の HTTP エンドポイントのプロキシとして機能する https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets のリソースで、API を作成します。

  • API が 2 つのメソッドリクエストのクエリパラメーター (petType および petsPage) を受け取り、それぞれ統合リクエストの type および page クエリパラメーターにマッピングして、リクエストを HTTP エンドポイントに渡すことができるようにします。

  • API のメソッドリクエスト URL の {petId} のパスパラメーターをサポートし、項目 ID を指定します。また、これを統合リクエストの URL で {id} パスパラメーターにマッピングし、リクエストを HTTP エンドポイントに送信します。

  • メソッドリクエストが、バックエンドウェブサイトで定義される形式の JSON ペイロードを受け取り、統合リクエストを通じて変更なしでペイロードをバックエンド HTTP エンドポイントに渡すことができるようにします。

この演習のステップでは使用されている大文字と小文字の違いに注意してください。大文字の代わりに小文字 (またはその逆) を入力すると、演習の後半でエラーが発生する場合があります。

前提条件

この演習を開始する前に、次の操作を行う必要があります。

  1. API Gateway を使用する準備を整える のステップ (API Gateway アクセス権限の IAM ユーザーへの割り当てなど) を完了します。

  2. 少なくとも、「HTTP エンドポイントを公開するための API Gateway API を作成する」のステップに従って、API Gateway コンソールで MyDemoAPI という新しい API を作成します。

ステップ 1: リソースを作成する

このステップでは、API が HTTP エンドポイントを操作するための 3 つのリソースを作成します。

最初のリソースを作成する

  1. [Resources] ペインで、1 つのスラッシュ (/) で表されるリソースルートを選択し、[Actions] ドロップダウンメニューから [Create Resource] を選択します。

  2. [Resource Name] に「petstorewalkthrough」を入力します。

    これは、HTTP エンドポイントで petstore にマッピングされます。

  3. [Resource Path] でデフォルトの [/petstorewalkthrough] を選択した後、[Create Resource] を選択します。

    これは、HTTP エンドポイントで /petstore にマッピングされます。

2 番目のリソースを作成する

  1. [Resources] ペインで、[/petstorewalkthrough] を選択してから [Create Resource] を選択します。

  2. [Resource Name] に「pets」を入力します。

    これは、HTTP エンドポイントで pets にマッピングされます。

  3. [Resource Path] でデフォルトの [/petstorewalkthrough/pets] を選択した後、[Create Resource] を選択します。

    これは、HTTP エンドポイントで /petstore/pets にマッピングされます。

3 番目のリソースを作成する

  1. [Resources] ペインで、[/petstorewalkthrough/pets] を選択してから [Create Resource] を選択します。

  2. [Resource Name] に「petId」を入力します。これは、HTTP エンドポイントの項目 ID にマッピングされます。

  3. [Resource Path] で、[petid] を「{petId}」で上書きします。petId は必ず中括弧 ({ }) で括り、「/petstorewalkthrough/pets/{petId}」と表示されるようにしてください。その後、[Create Resource] を選択します。

    これは、HTTP エンドポイントで /petstore/pets/my-item-id にマッピングされます。

ステップ 2: GET メソッドと POST メソッドを作成する

このステップでは、HTTP エンドポイントを操作するために、2 つの GET メソッドと POST メソッドを作成します。

最初の GET メソッドを作成する

  1. [Resources] ペインで、[/petstorewalkthrough/pets] を選択し、[Actions] ドロップダウンメニューの [Create Method] を選択します。

  2. [HTTP method] で、[GET] を選択し、選択内容を保存します。

2 番目の GET メソッドを作成する

  1. [Resources] ペインで、[/petstorewalkthrough/pets/{petId}] を選択してから [Create Method] を選択します。

  2. [HTTP method] で、[GET] を選択し、選択内容を保存します。

POST メソッドを作成する

  1. [Resources] ペインで、[/petstorewalkthrough/pets] を再度選択した後、[Create Method] を選択します。

  2. [HTTP method] で、[POST] を選択し、選択内容を保存します。

ステップ 3: メソッドをセットアップし、テストする

このステップでは、バックエンド HTTP エンドポイントとメソッドを統合し、GET メソッドリクエストパラメーターを該当する統合リクエストパラメーターにマッピングしてから、メソッドをテストします。

最初の GET メソッドをセットアップしてテストするには

この手順では、以下について示します。

  • GET /petstorewalkthrough/pets のメソッドリクエストを作成し、GET http://petstore-demo-endpoint.execute-api.com/petstore/pets の統合リクエストと統合します。

  • petType および petsPage のメソッドリクエストのクエリパラメーターを、統合リクエストのクエリ文字列パラメーター type および page にそれぞれマッピングします。

  1. [Resources] ペインで、[/petstorewalkthrough/pets] を選択して [Actions] メニューから [Create Method] を選択し、メソッド名のドロップダウンリストから [/pets] の下の [GET] を選択します。

  2. [/petstorewalkthrough/pets - GET - Setup] ペインで、[Integration type] の [HTTP] を選択し、[HTTP method] の [GET] を選択します。

  3. [Endpoint URL] に「http://petstore-demo-endpoint.execute-api.com/petstore/pets」を入力します。

  4. [Save] を選択します。

  5. [Method Execution] ペインで [Method Request] を選択した後、[URL Query String Parameters] の横の矢印を選択します。

  6. [Add query string] を選択します。

  7. [Name] に、「petType」と入力します。

    これは、API のメソッドリクエストの petType クエリパラメーターを指定します。

  8. 鉛筆アイコンを選択し、メソッドリクエスト URL クエリ文字列パラメーターの作成を完了します。

  9. [Add query string] を再度選択します。

  10. [Name] に、「petsPage」と入力します。

    これは、API のメソッドリクエストの petsPage クエリパラメーターを指定します。

  11. 鉛筆アイコンを選択し、メソッドリクエスト URL クエリ文字列パラメーターの作成を完了します。

  12. [Method Execution]、[Integration Request] の順に選択した後、[URL Query String Parameters] の横の矢印を選択します。

  13. [method.request.querystring.petType] からマッピングされた [petType] エントリと [method.request.querystring.petsPage] からマッピングされた [petsPage] を削除します。これは、エンドポイントが、リクエスト URL に対して、デフォルト値ではなく type および page という名前のクエリ文字列パラメーターを予期するためです。

  14. [Add query string] を選択します。

  15. [Name] に、「type」と入力します。これにより、統合リクエスト URL に必要なクエリ文字列パラメーターが作成されます。

  16. [Mapped from] に「method.request.querystring.petType」と入力します。

    これは、メソッドリクエストの petType クエリパラメーターを統合リクエストの type クエリパラメーターにマッピングします。

  17. 鉛筆アイコンを選択し、統合リクエスト URL クエリ文字列パラメーターの作成を完了します。

  18. [Add query string] を再度選択します。

  19. [Name] に、「page」と入力します。これにより、統合リクエスト URL に必要なクエリ文字列パラメーターが作成されます。

  20. [Mapped from] に「method.request.querystring.petsPage」と入力します。

    これは、メソッドリクエストの petsPage クエリパラメーターを統合リクエストの page クエリパラメーターにマッピングします。

  21. 鉛筆アイコンを選択し、統合リクエスト URL クエリ文字列パラメーターの作成を完了します。

  22. [Method Execution] を選択し、[Client] ボックスで [TEST] を選択します。[Query Strings] エリアの [petType] に「cat」と入力します。[petsPage] に「2」と入力します。

  23. [Test] を選択します。成功すると、[Response Body] に次の内容が表示されます。

    Copy
    [ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]

2 番目の GET メソッドをセットアップしてテストするには

この手順では、以下について示します。

  • GET /petstorewalkthrough/pets/{petId} のメソッドリクエストを作成し、GET http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id} の統合リクエストと統合します。

  • petId のメソッドリクエストのパスパラメーターを、id の統合リクエストのパスパラメーターにマッピングします。

  1. [Resources] リストで、[/petstorewalkthrough/pets/{petId}] を選択して [Actions] ドロップダウンメニューから [Create Method] を選択し、メソッドの HTTP 動詞として [GET] を選択します。

  2. [Setup] ペインで、[Integration type] に [HTTP] を選択し、[HTTP method] に [GET] を選択します。

  3. [Endpoint URL] で、[http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}] を入力します。

  4. [Save] を選択します。

  5. [Method Execution] ペインで [Integration Request] を選択した後、[URL Path Parameters] の横の矢印を選択します。

  6. [method.request.querystring.petId] から [petId] エントリを選択します。これは、エンドポイントが、リクエスト URL に対して、デフォルト値ではなく [id] という名前のクエリ文字列パラメーターを予期するためです。

  7. [Add path] を選択します。

  8. [Name] に id を入力します。

  9. [Mapped from] に「method.request.path.petId」と入力します。

    これは petId のメソッドリクエストのパスパラメーターを、id の統合リクエストのパスパラメーターにマッピングします。

  10. 鉛筆アイコンを選択し、URL パスパラメーターの作成を完了します。

  11. [Method Execution] を選択し、[Client] ボックスで [TEST] を選択します。[Path] エリアの [petId] に「 1」と入力します。

  12. [Test] を選択します。成功すると、[Response Body] に次の内容が表示されます。

    Copy
    { "id": 1, "type": "dog", "price": 249.99 }

POST メソッドをセットアップしてテストするには

この手順では、以下について示します。

  • POST /petstorewalkthrough/pets のメソッドリクエストを作成し、POST http://petstore-demo-endpoint.execute-api.com/petstore/pets の統合リクエストと統合します。

  • メソッドリクエストの JSON ペイロードを、変更せずに統合リクエストペイロードに渡します。

  1. [Resources] ペインで、[/petstorewalkthrough/pets]を選択して [Actions] ドロップダウンメニューから [Create Method] を選択し、メソッドの HTTP 動詞として [POST] を選択します。

  2. [Setup] ペインで、[Integration type] に [HTTP] を選択し、[HTTP method] に [POST] を選択します。

  3. [Endpoint URL] に「http://petstore-demo-endpoint.execute-api.com/petstore/pets」を入力します。

  4. [Save] を選択します。

  5. [Method Execution] ペインの [Client] ボックスで、[TEST] を選択します。[Request Body] を展開した後、次を入力します。

    Copy
    { "type": "dog", "price": 249.99 }
  6. [Test] を選択します。成功すると、[Response Body] に次の内容が表示されます。

    Copy
    { "pet": { "type": "dog", "price": 249.99 }, "message": "success" }

ステップ 4: API をデプロイする

このステップでは、API をデプロイして、以降 API Gateway コンソール外で呼び出せるようにします。

API をデプロイする

  1. [Resources] ペインで、[Deploy API] を選択します。

  2. [Deployment stage] で、[test] を選択します。

    注記

    入力は UTF-8 でエンコードされた (ローカライズされていない) テキストである必要があります。

  3. [Deployment description] に「HTTP エンドポイント呼び出しの演習」と入力します。

  4. [Deploy] を選択します。

ステップ 5: API をテストする

このステップでは、API Gateway コンソール外に移動し、API を使用して HTTP エンドポイントにアクセスします。

  1. [Stage Editor] ペインの [Invoke URL] の横で、URL をクリップボードにコピーします。次のように表示されます。

    Copy
    https://my-api-id.execute-api.region-id.amazonaws.com/test
  2. ブラウザーの新しいタブのアドレスボックスにこの URL を貼り付けます。

  3. 次のように /petstorewalkthrough/pets を追加します。

    Copy
    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets

    URL を参照します。次の情報が表示されます。

    Copy
    [ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]
  4. petstorewalkthrough/pets の後に、「?petType=cat&petsPage=2」と入力します。次のように表示されます。

    Copy
    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets?petType=cat&petsPage=2
  5. URL を参照します。次の情報が表示されます。

    Copy
    [ { "id": 4, "type": "cat", "price": 999.99 }, { "id": 5, "type": "cat", "price": 249.99 }, { "id": 6, "type": "cat", "price": 49.97 } ]
  6. petstorewalkthrough/pets の後の「?petType=cat&petsPage=2」を「/1」と置き換えます。次のように表示されます。

    Copy
    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets/1
  7. URL を参照します。次の情報が表示されます。

    Copy
    { "id": 1, "type": "dog", "price": 249.99 }
  8. ウェブデバッギングプロキシツールまたは cURL コマンドラインツールを使用して、前の手順から POST メソッドリクエストを URL に送信します。次のように、必ず /petstorewalkthrough/pets を追加してください。

    Copy
    https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets

    また、必ず以下のヘッダーを追加してください。

    Copy
    Content-Type: application/json

    また、リクエスト本文に必ず次のコードを追加してください。

    Copy
    { "type": "dog", "price": 249.99 }

    たとえば、cURL コマンドラインツールを使用する場合は、次のようなコマンドを実行します。

    Copy
    curl -H "Content-Type: application/json" -X POST -d "{\"type\": \"dog\",\"price\": 249.99}" https://my-api-id.execute-api.region-id.amazonaws.com/test/petstorewalkthrough/pets

    その後、次の情報が応答本文で返されます。

    Copy
    { "pet": { "type": "dog", "price": 249.99 }, "message": "success" }

このチュートリアルはこれで終了です。

次のステップ

次の演習では、API Gateway でモデルとマッピングを使用して API 呼び出しの出力データ形式を変換する方法を説明します。「レスポンスペイロードをマッピングする」を参照してください。