マッピングテンプレートについて
API Gateway では、API のメソッドリクエストまたはレスポンスは、統合リクエストまたはレスポンスとは異なる形式のペイロードを受け取ることができます。
データを次のように変換できます。
ペイロードを API 指定の形式に一致させます。
API のリクエストおよびレスポンスパラメータとステータスコードを上書きします。
クライアントが選択したレスポンスヘッダーを返します。
HTTP プロキシまたは AWS のサービスプロキシのメソッドリクエストにパスパラメータ、クエリ文字列パラメータ、またはヘッダーパラメータを関連付けます。
Amazon DynamoDB や Lambda 関数などの AWS のサービス、または HTTP エンドポイントとの統合を使用して送信するデータを選択します。
データを変換するには、マッピングテンプレートを使用できます。マッピングテンプレートは、Velocity Template Language (VTL)
次の例は、PetStore のデータ
入力データ |
|
マッピングテンプレート |
|
出力データ |
|
次の図は、このマッピングテンプレートの詳細を示しています。

$inputRoot
変数は、前のセクションにおける元の JSON データのルートオブジェクトです。ディレクティブは#
記号で始まります。foreach
ループは、元の JSON データ内の各オブジェクトを反復処理します。description は、元の JSON データからのペットの
id
とtype
を連結したものです。askingPrice
は元の JSON データからの価格を示すprice
です。
1 #set($inputRoot = $input.path('$')) 2 [ 3 #foreach($elem in $inputRoot) 4 { 5 "description" : "Item $elem.id is a $elem.type.", 6 "askingPrice" : $elem.price 7 }#if($foreach.hasNext),#end 8 #end 9 ]
このマッピングテンプレートの内容は以下のとおりです。
-
1 行目で、
$inputRoot
変数は前のセクションからの元の JSON データのルートオブジェクトを表します。ディレクティブは#
記号で始まります。 -
3 行目で、
foreach
ループは元の JSON データ内の各オブジェクトを反復処理します。 -
5 行目で、
description
は、元の JSON データからのペットのid
とtype
を連結したものです。 -
6 行目で、
askingPrice
は元の JSON データからの価格を示すprice
です。
Velocity Template Language の詳細については、「Apache Velocity - VTL Reference
マッピングテンプレートでは、基盤となるデータが JSON オブジェクトであることを前提としています。データのモデルを定義する必要はありません。ただし、出力データのモデルを使用すると、先行データを言語固有のオブジェクトとして返すことができます。詳細については、「データモデルを理解する」を参照してください。
複雑なマッピングテンプレート
また、次の例のように、カットオフを使用してペットが手頃な価格かどうかを確認する、より複雑なマッピングテンプレートを作成することもできます。
入力データ |
|
マッピングテンプレート |
|
出力データ |
|
より複雑なモデルについては、フォトアルバムの例「写真の例」を参照してください。