API のリクエスト、レスポンスパラメータおよびステータスコードをオーバーライドする例 - Amazon API Gateway

API のリクエスト、レスポンスパラメータおよびステータスコードをオーバーライドする例

次の例は、マッピングテンプレートのオーバーライドを作成してテストする方法を示しています。最初の 2 つの例では、AWS Management Console とサンプル API を開始点として使用します。最後の 2 つの例では、AWS CLI と SDK for JavaScript を使用します。

AWS Management Console を使用して API のレスポンスステータスコードをオーバーライドする

PetStore サンプル API を使用してペットを取得するには、GET /pets/{petId} の API メソッドリクエストを使用します。{petId} は、実行時に数字をとることができるパスパラメータです。

この例では、エラー状態が検出された場合、GET$context.responseOverride.status にマッピングするマッピングテンプレートを作成することで、この 400 メソッドのレスポンスコードをオーバーライドします。

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

  2. [API] で PetStore API を選択し、[リソース] を選択します。

  3. [リソース] ツリーで、/{petId} の下の GET メソッドを選択します。

  4. [テスト] タブを選択します。タブを表示するには、右矢印ボタンを選択する必要がある場合があります。

  5. [petId] に「-1」と入力し、[テスト] を選択します。

    結果として、2 つのことが分かります。

    まず、[レスポンス本文] は範囲外エラーを示します。

    { "errors": [ { "key": "GetPetRequest.petId", "message": "The value is out of range." } ] }

    次に、[ログ] ボックスの最後の行は Method completed with status: 200 で終わります。

  6. [統合レスポンス] タブの [デフォルト - レスポンス] で、[編集] を選択します。

  7. [マッピングテンプレート] を選択します。

  8. [マッピングテンプレートの追加] を選択します。

  9. [コンテンツタイプ] に、「application/json」と入力します。

  10. [テンプレート本文] で次のように入力します。

    #set($inputRoot = $input.path('$')) $input.json("$") #if($inputRoot.toString().contains("error")) #set($context.responseOverride.status = 400) #end
  11. [Save] を選択します。

  12. [テスト] タブを選択します。

  13. [petId] に「-1」と入力します。

  14. 結果として、[Response Body (レスポンス本文)] は範囲外エラーを示します。

    { "errors": [ { "key": "GetPetRequest.petId", "message": "The value is out of range." } ] }

    ただし、[Logs (ログ)] ボックスの最後の行は、Method completed with status: 400 で終わるようになりました。

AWS Management Console を使用して API のリクエストパラメータとヘッダーをオーバーライドする

この例では、GET を他の 2 つのヘッダーを組み合わせる新しいヘッダーにマッピングするマッピングテンプレートを作成することで、$context.requestOverride.header.header_name メソッドのリクエストヘッダーコードをオーバーライドします。

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

  2. [API] で、PetStore API を選択します。

  3. [リソース] ツリーで、/pet の下の GET メソッドを選択します。

  4. [メソッドリクエスト] タブの [メソッドリクエストの設定] で、[編集] を選択します。

  5. [HTTP リクエストヘッダー] を選択した後、[ヘッダーの追加] を選択します。

  6. [名前] にheader1と入力します。

  7. [ヘッダーを追加] を選択し、header2 という名前の 2 つ目のヘッダーを作成します。

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

  9. [統合リクエスト] タブの [統合リクエストの設定] で、[編集] を選択します。

  10. [リクエスト本文のパススルー] で、[テンプレートが定義されていない場合 (推奨)] を選択します。

  11. [マッピングテンプレート] を選択し、次の操作を行います。

    1. [マッピングテンプレートの追加] を選択します。

    2. [コンテンツタイプ] に、「application/json」と入力します。

    3. [テンプレート本文] で次のように入力します。

      #set($header1Override = "foo") #set($header3Value = "$input.params('header1')$input.params('header2')") $input.json("$") #set($context.requestOverride.header.header3 = $header3Value) #set($context.requestOverride.header.header1 = $header1Override) #set($context.requestOverride.header.multivalueheader=[$header1Override, $header3Value])
  12. [Save] を選択します。

  13. [テスト] タブを選択します。

  14. [Headers (ヘッダー)] で、[{pets}] に、次のコードをコピーします。

    header1:header1Val header2:header2Val
  15. [Test (テスト)] を選択します。

    [ログ] に、このテキストを含むエントリが表示されます。

    Endpoint request headers: {header3=header1Valheader2Val, header2=header2Val, header1=foo, x-amzn-apigateway-api-id=<api-id>, Accept=application/json, multivalueheader=foo,header1Valheader2Val}

AWS CLI を使用して API のリクエストパラメータとヘッダーをオーバーライドする

次の CLI の例では、put-integration コマンドを使用してレスポンスコードをオーバーライドする方法を示しています。

aws apigateway put-integration --rest-api-id <API_ID> --resource-id <PATH_TO_RESOURCE_ID> --http-method <METHOD> --type <INTEGRATION_TYPE> --request-templates <REQUEST_TEMPLATE_MAP>

ここで、<REQUEST_TEMPLATE_MAP> は、コンテンツタイプから適用されるテンプレートの文字列へのマッピングです。マッピングは以下のような構造になっています。

Content_type1=template_string,Content_type2=template_string

または、JSON 構文です。

{"content_type1": "template_string" ...}

次の例では、put-integration-response コマンドを使用して API レスポンスコードをオーバーライドする方法を示しています。

aws apigateway put-integration-response --rest-api-id <API_ID> --resource-id <PATH_TO_RESOURCE_ID> --http-method <METHOD> --status-code <STATUS_CODE> --response-templates <RESPONSE_TEMPLATE_MAP>

<RESPONSE_TEMPLATE_MAP> は先ほどの <REQUEST_TEMPLATE_MAP> と同じ形式です。

SDK for JavaScript を使用して API のリクエストパラメータとヘッダーをオーバーライドする

次の例では、put-integration コマンドを使用してレスポンスコードをオーバーライドする方法を示しています。

リクエスト:

var params = { httpMethod: 'STRING_VALUE', /* required */ resourceId: 'STRING_VALUE', /* required */ restApiId: 'STRING_VALUE', /* required */ type: HTTP | AWS | MOCK | HTTP_PROXY | AWS_PROXY, /* required */ requestTemplates: { '<Content_type>': 'TEMPLATE_STRING', /* '<String>': ... */ }, }; apigateway.putIntegration(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response });

レスポンス:

var params = { httpMethod: 'STRING_VALUE', /* required */ resourceId: 'STRING_VALUE', /* required */ restApiId: 'STRING_VALUE', /* required */ statusCode: 'STRING_VALUE', /* required */ responseTemplates: { '<Content_type>': 'TEMPLATE_STRING', /* '<String>': ... */ }, }; apigateway.putIntegrationResponse(params, function(err, data) { if (err) console.log(err, err.stack); // an error occurred else console.log(data); // successful response });