针对 API Gateway 中的 HTTP API 转换 API 请求和响应 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

针对 API Gateway 中的 HTTP API 转换 API 请求和响应

您可以在客户端 API 请求到达后端集成之前修改它们。您还可以在 API Gateway 将响应返回给客户端之前更改集成的响应。您可以使用参数映射修改 HTTP API 的 API 请求和响应。要使用参数映射,您需要指定要修改的 API 请求或响应参数,并指定如何修改这些参数。

转换 API 请求

在请求到达后端集成之前,您可以使用请求参数更改请求。您可以修改标头、查询字符串或请求路径。

请求参数是键值映射。键用于标识要更改的请求参数的位置以及如何更改它。值指定参数的新数据。

下表显示了支持的键。

参数映射键
类型 语法
标头 append|overwrite|remove:header.headername
查询字符串 append|overwrite|remove:querystring.querystring-name
路径 overwrite:path

下表显示了可以映射到参数的支持值。

请求参数映射值
类型 语法 备注
标头值 $request.header.name 或 ${request.header.name} 标头名称不区分大小写。API Gateway 将多个标头值与逗号组合在一起,例如 "header1": "value1,value2"。保留一些标头。要了解更多信息,请参阅“保留的标头”。
查询字符串值 $request.querystring.name 或 ${request.querystring.name} 查询字符串名称区分大小写。API Gateway 将多个值与逗号组合在一起,例如 "querystring1" "Value1,Value2"
请求正文 $request.body.name 或 ${request.body.name} JSON 路径表达式 不支持递归下降 ($request.body..name) 和筛选表达式 (?(expression))。
注意

当您指定 JSON 路径时,API Gateway 会在请求正文的 100 KB 处将其截断,然后应用选择表达式。要发送大于 100 KB 的负载,请指定 $request.body

请求路径 $request.path 或 $ {request.path} 请求路径,没有阶段名称。
路径参数 $request.path.name 或 ${request.path.name} 请求中路径参数的值。例如,如果路由为 /pets/{petId},则可以从具有 petId 的请求中映射 $request.path.petId 参数。
上下文变量 $context.variableName 或 ${context.variableName} 上下文变量的值。
注意

仅支持特殊字符 ._

阶段变量 $stageVariables.variableName 或 ${stageVariables.variableName} 阶段变量的值。
静态值 string 常量值。
注意

要在选择表达式中使用多个变量,请将该变量括在括号中。例如,${request.path.name} ${request.path.id}

转换 API 响应

在将响应返回给客户端之前,您可以使用响应参数转换来自后端集成的 HTTP 响应。在 API Gateway 将响应返回给客户端之前,您可以修改响应的标头或状态码。

您可以为集成返回的每个状态代码配置响应参数。响应参数是键值映射。键用于标识要更改的请求参数的位置以及如何更改它。值指定参数的新数据。

下表显示了支持的键。

响应参数映射键
类型 语法
标头 append|overwrite|remove:header.headername
状态代码 overwrite:statuscode

下表显示了可以映射到参数的支持值。

响应参数映射值
类型 语法 备注
标头值 $response.header.name 或 ${response.header.name} 标头名称不区分大小写。API Gateway 将多个标头值与逗号组合在一起,例如 "header1": "value1,value2"。保留一些标头。要了解更多信息,请参阅“保留的标头”。
响应正文 $response.body.name 或 ${response.body.name} JSON 路径表达式 不支持递归下降 ($response.body..name) 和筛选表达式 (?(expression))。
注意

当您指定 JSON 路径时,API Gateway 会在响应正文的 100 KB 处将其截断,然后应用选择表达式。要发送大于 100 KB 的负载,请指定 $response.body

上下文变量 $context.variableName 或 ${context.variableName} 受支持的上下文变量的值。
阶段变量 $stageVariables.variableName 或 ${stageVariables.variableName} 阶段变量的值。
静态值 string 常量值。
注意

要在选择表达式中使用多个变量,请将该变量括在括号中。例如,${request.path.name} ${request.path.id}

保留的标头

保留以下标头。您无法为这些标头配置请求或响应映射。

  • access-control-*

  • apigw-*

  • 授权

  • Connection

  • Content-Encoding

  • 内容长度

  • Content-Location

  • 已转发

  • Keep-Alive

  • Origin

  • Proxy-Authenticate

  • Proxy-Authorization

  • TE

  • Trailers

  • Transfer-Encoding

  • 升级

  • x-amz-*

  • x-amzn-*

  • X-Forwarded-For

  • X-Forwarded-Host

  • X-Forwarded-Proto

  • Via

示例

以下 Amazon CLI 示例会配置参数映射。如需示例 Amazon CloudFormation 模板,请参阅 GitHub

向 API 请求添加标头

以下示例在 API 请求到达后端集成之前将名为 header1 的标头添加到该请求中。API Gateway 使用请求 ID 填充标头。

aws apigatewayv2 create-integration \ --api-id abcdef123 \ --integration-type HTTP_PROXY \ --payload-format-version 1.0 \ --integration-uri 'https://api.example.com' \ --integration-method ANY \ --request-parameters '{ "append:header.header1": "$context.requestId" }'

重命名请求标头

以下示例将请求标头从 header1 重命名为 header2

aws apigatewayv2 create-integration \ --api-id abcdef123 \ --integration-type HTTP_PROXY \ --payload-format-version 1.0 \ --integration-uri 'https://api.example.com' \ --integration-method ANY \ --request-parameters '{ "append:header.header2": "$request.header.header1", "remove:header.header1": "''"}'

更改集成的响应

以下示例为集成配置响应参数。当集成返回 500 状态码时,API Gateway 会将状态码更改为 403,然后在响应中添加 header11。当集成返回 404 状态码时,API Gateway 会向响应添加 error 标头。

aws apigatewayv2 create-integration \ --api-id abcdef123 \ --integration-type HTTP_PROXY \ --payload-format-version 1.0 \ --integration-uri 'https://api.example.com' \ --integration-method ANY \ --response-parameters '{"500" : {"append:header.header1": "$context.requestId", "overwrite:statuscode" : "403"}, "404" : {"append:header.error" : "$stageVariables.environmentId"} }'

删除配置的参数映射

以下示例命令删除以前为 append:header.header1 配置的请求参数。它还删除了先前为 200 状态码配置的响应参数。

aws apigatewayv2 update-integration \ --api-id abcdef123 \ --integration-id hijk456 \ --request-parameters '{"append:header.header1" : ""}' \ --response-parameters '{"200" : {}}'