

# 针对 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`。

要创建数据转换，可以使用以下功能：

**参数映射**  
在参数映射中，可以修改集成请求 URL 路径参数、URL 查询字符串参数或 HTTP 标头值，但不能修改集成请求有效载荷。也可以修改 HTTP 响应标头值。使用参数映射为跨源资源共享（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 Web Services 服务（例如 Amazon DynamoDB 或 Lambda 函数或 HTTP 端点）的集成发送哪些数据。有关更多信息，请参阅 [教程：修改集成请求和响应以集成到 Amazon 服务](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 要求您更改正文，或者要求您根据传入的集成请求或集成响应执行有条件覆盖和修改，并且您无法使用代理集成，请使用映射模板转换。