API Gateway 中的 WebSocket 选择表达式 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

API Gateway 中的 WebSocket 选择表达式

API Gateway 使用选择表达式作为一种评估请求和响应上下文并生成键的方法。然后,该键用于从通常由您,即 API 开发人员提供的一组可能值中进行选择。确切的受支持变量集将因特定表达式而异。下文更为详细地描述了每个表达式。

对于所有表达式,该语言遵循相同的规则集:

  • 变量以 "$" 为前缀。

  • 大括号可用于明确定义变量边界,例如,"${request.body.version}-beta"

  • 支持多个变量,但评估仅发生一次(无递归评估)。

  • 可以使用 $ 对美元符号 ("\") 进行转义。这在定义映射到保留的 $default 键(例如 "\$default")的表达式时非常有用。

  • 在某些情况下,需要模式格式。在这种情况下,表达式应该用正斜杠 ("/") 包装起来,例如,"/2\d\d/",以便匹配 2XX 状态代码。

路由响应选择表达式

路由响应用于对从后端到客户端的响应建模。对于 WebSocket API,路由响应是可选的。定义后,它向 API Gateway 发出信号,表示它应该在收到 WebSocket 消息时向客户端返回响应。

路由响应选择表达式的求解会产生路由响应键。最终,此密钥将用于从与 API 相关联的一个 RouteResponses 中进行选择。但是,目前仅支持 $default 键。

API 键选择表达式

如果服务确定仅当客户端提供有效的 API 键时给定的请求才应继续,则会求解此表达式。

目前,仅支持的两个值是 $request.header.x-api-key$context.authorizer.usageIdentifierKey

API 映射选择表达式

将会求解估此表达式以确定在使用自定义域发出请求时选择哪个 API 阶段。

目前,唯一支持的值是 $request.basepath

WebSocket 选择表达式摘要

下表总结了 WebSocket API 中的选择表达式的用例:

选择表达式 求解为以下对象的键 备注 示例使用案例
Api.RouteSelectionExpression Route.RouteKey $default支持 作为包罗万象的路由。 根据客户端请求的上下文路由 WebSocket 消息。
Route.ModelSelectionExpression Route.RequestModels 的键

可选。

如果是为非代理集成提供的,则会发生模型验证。

$default支持 作为包罗万象的路由。

在同一路径中动态执行请求验证。
Integration.TemplateSelectionExpression Integration.RequestTemplates 的键

可选。

可以为非代理集成提供,用于处理传入的负载。

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

$default支持 作为包罗万象的路由。

根据请求的动态属性处理调用方的请求。
Integration.IntegrationResponseSelectionExpression IntegrationResponse.IntegrationResponseKey

可选。可以为非代理集成提供。

充当错误消息(来自 Lambda)或状态代码(来自 HTTP 集成)的模式匹配。

$default非代理集成需要 来充当包罗万象的成功响应。

处理来自后端的响应。

选择根据后端的动态响应发生的操作(例如,明显地处理某些错误)。

IntegrationResponse.TemplateSelectionExpression IntegrationResponse.ResponseTemplates 的键 可选。可以为非代理集成提供。

支持 $default。

在某些情况下,响应的动态属性可能决定相同路径和相关集成内的不同变换。

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

$default支持 作为包罗万象的路由。

Route.RouteResponseSelectionExpression RouteResponse.RouteResponseKey

应提供以对 WebSocket 路由启动双向通信。

目前,此值仅限于 $default

RouteResponse.ModelSelectionExpression RouteResponse.RequestModels 的键 目前不受支持。