

# API Gateway での REST API のデータ変換
<a name="rest-api-data-transformations"></a>

**注記**  
このセクションでは、非プロキシ統合で使用する関数について説明します。ただし、可能な場合は、REST API ではプロキシ統合を使用することをお勧めします。プロキシ統合にも合理化された統合設定があり、既存の設定を破棄することなくバックエンドで拡張できます。詳細については、「[API Gateway API 統合タイプの選択](api-gateway-api-integration-types.md)」を参照してください。

非プロキシ統合を使用する場合、API Gateway の 2 つの関数を使用して、メソッドリクエストと統合レスポンスを変換できます。統合リクエストのペイロードとは異なるペイロード形式を使用している場合は、メソッドリクエストを変換できます。メソッドレスポンスで返す必要がある形式とは異なるペイロード形式が返された場合、統合レスポンスを変換できます。リクエストのライフサイクルに関する詳細は、「[REST API のリソース例](rest-api-develop.md#rest-api-develop-example)」を参照してください。

次の例は、ヘッダー `"x-version:beta"` の場合、`x-version` ヘッダーパラメータが `app-version` ヘッダーパラメータに変換されるデータ変換を説明しています。`x-version` から `app-version` へのデータ変換は、統合リクエストで行われます。これにより、統合エンドポイントは変換されたヘッダーパラメータ値を受け取ります。統合エンドポイントがステータスコードを返すと、メソッドレスポンスの前にステータスコードが `200` から `204` に変換されます。

![API Gateway データ変換の図](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/develop-non-proxy.png)


データ変換を作成するには、以下の関数を使用できます。

**パラメータのマッピング**  
パラメータマッピングで変更できるのは、統合リクエストの URL パスパラメータ、URL クエリ文字列パラメータ、または HTTP ヘッダー値です。統合リクエストペイロードは変更できません。HTTP レスポンスヘッダー値も変更できます。パラメータマッピングを使用して、Cross-Origin Resource Sharing(CORS) の静的ヘッダー値を作成します。  
パラメータマッピングは、プロキシ統合と非プロキシ統合の統合リクエストでは使用できますが、統合レスポンスでは、非プロキシ統合を使用する必要があります。パラメータマッピングでは、[Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html) でのスクリプトは必要ありません。詳細については、「[API Gateway の REST API パラメータマッピング](rest-api-parameter-mapping.md)」を参照してください。

**テンプレート変換のマッピング**  
マッピングテンプレート変換では、マッピングテンプレートを使用して、URL パス パラメータ、URL クエリ文字列パラメータ、HTTP ヘッダー、統合リクエストまたは統合レスポンスの本文をマッピングします。*マッピングテンプレート*は、[JSONPath 式](https://goessner.net/articles/JsonPath/)を使用して [Velocity Template Language (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html) で表現され、`Content-type` ヘッダーに基づいてペイロードに適用されるスクリプトです。  
マッピングテンプレートでは、以下を実行できます。  
+ Amazon DynamoDB や Lambda 関数などの AWS のサービス、または HTTP エンドポイントとの統合を使用して送信するデータを選択します。詳細については、「[チュートリアル: AWS サービスへの統合のための統合リクエストとレスポンスを変更する](set-up-data-transformations-in-api-gateway.md)」を参照してください。
+ API の統合リクエストと統合レスポンスパラメータを条件付きで上書きし、新しいヘッダー値を作成して、ステータスコードを上書きします。詳細については、「[API Gateway で REST API の API リクエストパラメータおよびレスポンスパラメータとステータスコードを上書きする](apigateway-override-request-response-parameters.md)」を参照してください。
統合リクエスト本文に一致するマッピングテンプレートがない `Content-type` ヘッダーがある場合の API の動作を指定することもできます。これは、統合パススルーの動作と呼ばれます。詳細については、「[API Gateway で REST API のマッピングテンプレートを使用しないペイロードのメソッドリクエストの動作](integration-passthrough-behaviors.md)」を参照してください。

## パラメータマッピングとマッピングテンプレート変換のどちらかを選択する
<a name="rest-api-data-transformations-choose"></a>

可能であれば、データの変換にはパラメータマッピングの使用をお勧めします。API で本文を変更する必要がある場合、または受信統合リクエストまたは統合レスポンスに基づいて条件付き上書きと変更を実行する必要がある場合に、プロキシ統合を使用できないときは、マッピングテンプレート変換を使用します。