API Gateway 使用选择表达式作为一种评估请求和响应上下文并生成键的方法。然后,该键用于从通常由您,即 API 开发人员提供的一组可能值中进行选择。确切的受支持变量集将因特定表达式而异。下文更为详细地描述了每个表达式。
对于所有表达式,该语言遵循相同的规则集:
-
变量以
"$"
为前缀。 -
大括号可用于明确定义变量边界,例如,
"${request.body.version}-beta"
。 -
支持多个变量,但评估仅发生一次(无递归评估)。
-
可以使用
$
对美元符号 ("\"
) 进行转义。这在定义映射到保留的$default
键(例如"\$default"
)的表达式时非常有用。 -
在某些情况下,需要模式格式。在这种情况下,表达式应该用正斜杠 (
"/"
) 包装起来,例如,"/2\d\d/"
,以便匹配2
状态代码。XX
路由响应选择表达式
路由响应用于对从后端到客户端的响应建模。对于 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 的键 |
可选。 如果是为非代理集成提供的,则会发生模型验证。
|
在同一路径中动态执行请求验证。 |
Integration.TemplateSelectionExpression |
Integration.RequestTemplates 的键 |
可选。 可以为非代理集成提供,用于处理传入的负载。
|
根据请求的动态属性处理调用方的请求。 |
Integration.IntegrationResponseSelectionExpression |
IntegrationResponse.IntegrationResponseKey |
可选。可以为非代理集成提供。 充当错误消息(来自 Lambda)或状态代码(来自 HTTP 集成)的模式匹配。
|
处理来自后端的响应。 选择根据后端的动态响应发生的操作(例如,明显地处理某些错误)。 |
IntegrationResponse.TemplateSelectionExpression |
IntegrationResponse.ResponseTemplates 的键 |
可选。可以为非代理集成提供。 支持 $default。 |
在某些情况下,响应的动态属性可能决定相同路径和相关集成内的不同变换。 支持
|
Route.RouteResponseSelectionExpression |
RouteResponse.RouteResponseKey |
应提供以对 WebSocket 路由启动双向通信。 目前,此值仅限于 |
|
RouteResponse.ModelSelectionExpression |
RouteResponse.RequestModels 的键 |
目前不受支持。 |