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

针对 API Gateway 中的 WebSocket API 的数据转换

在 API Gateway 中,WebSocket API 的方法请求采用的负载格式可能与后端所需的相应集成请求负载的格式不同。同样,后端返回的集成响应负载可能不同于前端希望的方法响应负载。

API Gateway 允许您使用映射模板将负载从方法请求映射到相应的集成请求,以及从集成响应映射到相应的方法响应。您可以指定模板选择表达式来确定执行必要的数据转换时所用的模板。

您可以使用数据映射将路由请求中的数据映射到后端集成。要了解更多信息,请参阅“为 API Gateway 中的 WebSocket API 设置数据映射”。

映射模板和模型

映射模板是一个用 Velocity 模板语言 (VTL) 表示的脚本,应用于使用 JSONPath 表达式的负载。有关 API Gateway 映射模板的更多信息,请参阅针对 REST API 的映射模板

负载可以拥有符合 JSON 架构草案 4数据模型。您不必定义模型来创建映射模板。但是,模型可以帮助您创建模板,因为 API Gateway 根据提供的模型生成模板蓝图。有关 API Gateway 模型的更多信息,请参阅针对 REST API 的数据模型

模板选择表达式

要使用映射模板转换负载,请在集成请求集成响应中指定 WebSocket API 模板选择表达式。将会求解此表达式以确定用于将请求正文转换为集成请求正文(通过输入模板)或将响应正文转换为路由响应正文(通过输出模板)的输入或输出模板(如果有)。

Integration.TemplateSelectionExpression 支持 ${request.body.jsonPath} 和静态值。

IntegrationResponse.TemplateSelectionExpression 支持 ${request.body.jsonPath}${integration.response.statuscode}${integration.response.header.headerName}${integration.response.multivalueheader.headerName} 和静态值。

集成响应选择表达式

当您为 WebSocket API 设置集成响应时,您可以指定(可选)集成响应选择表达式。此表达式确定在集成返回时应选择什么 IntegrationResponse。此表达式的值当前受 API Gateway 限制,定义如下。认识到此表达式只与非代理集成相关;代理集成无需建模或修改便会将响应负载传递回调用方。

与前面的其他选择表达式不同,此表达式当前支持模式匹配 格式。表达式应该用正斜杠包装起来。

目前,该值是固定的,具体取决于 integrationType

  • 对于基于 Lambda 的集成,它是 $integration.response.body.errorMessage

  • 对于 HTTPMOCK 集成,它是 $integration.response.statuscode

  • 对于 HTTP_PROXYAWS_PROXY,不会使用此表达式,因为您请求将负载传递给调用方。