

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# API Gateway 中用於 REST API 的資料轉換
<a name="rest-api-data-transformations"></a>

**注意**  
本節說明可搭配非代理整合使用的功能。不過，我們建議您盡可能針對 REST API 使用代理整合。代理整合採用簡化的整合設定，並且可隨著後端演進，而不必縮減現有的設定。如需詳細資訊，請參閱[選擇 API Gateway API 整合類型](api-gateway-api-integration-types.md)。

如果您使用非代理整合，您可以使用 API Gateway 的兩項功能來轉換方法請求和整合回應。如果方法請求採用與整合請求承載不同的承載格式，則您可以轉換方法請求。如果整合回應傳回的承載格式與方法回應中需要傳回的格式不同，則您可以轉換整合回應。如需有關請求生命週期的詳細資訊，請參閱 [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/zh_tw/apigateway/latest/developerguide/images/develop-non-proxy.png)


若要建立資料轉換，您可以使用下列功能：

**參數映射**  
在參數映射中，您可以修改整合請求 URL 路徑參數、URL 查詢字串參數或 HTTP 標頭值，但無法修改整合請求承載。您也可以修改 HTTP 回應標頭值。使用參數映射建立跨來源資源分享 (CORS) 的靜態標頭值。  
您可以在代理和非代理整合的整合請求中使用參數映射，但若要將參數映射用於整合回應，則需要非代理整合。參數映射不需要使用 [ Velocity 範本語言 (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html) 編寫任何指令碼。如需詳細資訊，請參閱[API Gateway 中 REST API 的參數映射](rest-api-parameter-mapping.md)。

**映射範本轉換**  
在映射範本轉換中，您可以使用映射範本來對應 URL 路徑參數、URL 查詢字串參數、HTTP 標頭，以及整合請求或整合回應內文。*映射範本*是以 [Velocity 範本語言 (VTL)](https://velocity.apache.org/engine/devel/vtl-reference.html) 表達的指令碼，會使用 [JSONPath 表達式](https://goessner.net/articles/JsonPath/)並根據 `Content-type` 標頭套用至承載。  
您可以使用映射範本執行下列操作：  
+ 選取要使用整合傳送的資料 AWS 服務，例如 Amazon DynamoDB 或 Lambda 函數或 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 要求您變更內文，或要求您根據傳入的整合請求或整合回應執行條件式覆寫和修改，而且您無法使用代理整合，則使用映射範本轉換。