WebSocket 選取表示式 - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

WebSocket 選取表示式

APIGateway 使用選擇表達式作為評估請求和響應上下文並生成密鑰的一種方式。然後,密鑰用於從一組可能的值中進行選擇,通常由您(API開發人員)提供。所支援的實際變數組將取決於特定表達式,各表達式詳細說明如下。

所有表達式的語言都遵循同一組規則:

  • 變數字首會加上 "$"

  • 大括號可用來明確定義變數邊界,例如 "${request.body.version}-beta"

  • 支援多個變數,但僅會評估一次 (無遞迴評估)。

  • 貨幣符號 ($) 可用 "\" 逸出。在定義映射至預留 $default 金鑰 (如 "\$default") 的表達式時,這條規則十分實用。

  • 有時需要模式格式,此時,表達式前後應以斜線 ("/") 包裝,例如應符合 "/2\d\d/" 狀態碼的 2XX

路由回應選擇表達式

路由回應係用來將後端到用戶端的回應建模。對於 WebSocket APIs,路由響應是可選的。定義時,它會向 API Gateway 發出信號,它應該在收到 WebSocket 消息時向客戶端返回響應。

路由回應選擇表達式的評估將產生路由回應金鑰。最後,此金鑰將用於從RouteResponses與API. 然而,目前僅支援 $default 金鑰。

API鍵選取表示式

當服務確定只有在客戶端提供有效的API密鑰時才應該繼續給定的請求時,才會評估此表達式。

目前僅支援兩個值:$request.header.x-api-key$context.authorizer.usageIdentifierKey

API對映選取表示式

系統會評估此運算式,以決定使用自訂網域發出請求時要選取的API階段。

目前,僅支援的值為 $request.basepath

WebSocket選取表示式摘要

下表概述了中選取項表示式的使用案例 WebSocketAPIs:

選擇表達式 判斷值為下列的金鑰 備註 範例使用案例
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 的金鑰 目前不支援。