本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
要求驗證 WebSocket API Gateway 中的 API
您可以將 API Gateway 設定為對路由執行驗證,再繼續進行整合請求。如果驗證失敗,API Gateway 會在不呼叫後端的情況下失敗要求,傳送「錯誤的要求主體」閘道回應給用戶端,然後在 CloudWatch 記錄檔中發佈驗證結果。以這種方式使用驗證減少對 API 後端的不必要呼叫。
模型選擇表達式
您可以使用模型選擇表示式來動態驗證相同路由內的請求。如果您為代理或非代理整合提供模型選取表示式,就會發生模型驗證。找不到相符的模型時,您可能需要將 $default
模型定義為回復。如果沒有相符的模型,而且沒有定義 $default
,驗證會失敗。選取表示式看起來類似 Route.ModelSelectionExpression
並評估為 Route.RequestModels
的索引鍵。
定義 WebSocket API 的路由時,您可以選擇性地指定模型選取運算式。評估此表達式後,即可選取接收請求時將用於內文驗證的模型。此運算式的判斷值為路由的 requestmodels
其中一個項目。
模型是以 JSON 結構描述
使用 API Gateway 主控台設定請求驗證
下列範例說明如何在路由上設定要求驗證。
首先,建立模型,然後建立路線。接下來,您可以在剛建立的路由上設定要求驗證。最後,您部署和測試您的 API。若要完成本教學課程,您需要一個 WebSocket API $request.body.action
作為路由選取運算式,以及新路由的整合端點。
您還需要 wscat
來連線到 API。如需詳細資訊,請參閱 用wscat於連接到 WebSocket API 並向其發送消息。
建立裝置
在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway
。 選擇一個 WebSocket API。
在主導覽窗格中,選擇模型。
選擇建立模型。
針對名稱,輸入
emailModel
。針對內容類型,輸入
application/json
。針對模型結構描述,輸入下列模型:
{ "$schema": "http://json-schema.org/draft-04/schema#", "type" : "object", "required" : [ "address"], "properties" : { "address": { "type": "string" } } }
此模型要求請求包含電子郵件地址。
選擇儲存。
在此步驟中,您會為 WebSocket API 建立路由。
建立路由
在主導覽窗格中,選擇「路由」。
選擇 Create route (建立路由)。
對於 Route key (路由金鑰),輸入
sendMessage
。選擇整合類型並指定整合端點。如需更多資訊,請參閱 WebSocket API Gateway 中的 API 整合。
選擇 Create route (建立路由)。
在此步驟中,您可以設定sendMessage
路由的要求驗證。
若要設定請求驗證
在 [路由要求] 索引標籤的 [路由要求設定] 下,選擇 [編輯]。
對於「模型」選取表示式,輸入
${request.body.messageType}
。API Gateway 會使用
messageType
屬性來驗證傳入的要求。選擇 [新增請求模型]。
對於「模型金鑰」,輸入
email
。對於「型號」,選擇「電子郵件模
API Gateway 會
email
針對此模型驗證內送訊息,並將messageType
屬性設定為。注意
如果 API Gateway 無法將模型選取運算式與模型金鑰相符,則會選取
$default
模型。如果沒有$default
模型,則驗證失敗。對於生產 API,我們建議您建立$default
模型。選擇儲存變更。
在此步驟中,您將部署並測試您的 API。
若要部署和測試您的 API
選擇部署 API。
從下拉式清單中選擇所需的階段,或輸入新階段的名稱。
選擇部署。
在主導覽窗格中,選擇階段。
複製您的 API WebSocket 網址。URL 看起來應該會像這樣:
wss://
。abcdef123
.execute-api.us-east-2
.amazonaws.com/production打開一個新的終端並使用以下參數運行wscat命令。
wscat -c wss://
abcdef123
.execute-api.us-west-2
.amazonaws.com/productionConnected (press CTRL+C to quit)
使用以下命令來測試您的 API。
{"action": "sendMessage", "messageType": "email"}
{"message": "Invalid request body", "connectionId":"ABCD1=234", "requestId":"EFGH="}
API Gateway 將失敗請求。
使用下一個命令將有效請求發送到您的 API。
{"action": "sendMessage", "messageType": "email", "address": "mary_major@example.com"}