要求驗證 WebSocket API Gateway 中的 API - Amazon API Gateway

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

要求驗證 WebSocket API Gateway 中的 API

您可以將 API Gateway 設定為對路由執行驗證,再繼續進行整合請求。如果驗證失敗,API Gateway 會在不呼叫後端的情況下失敗要求,傳送「錯誤的要求主體」閘道回應給用戶端,然後在 CloudWatch 記錄檔中發佈驗證結果。以這種方式使用驗證減少對 API 後端的不必要呼叫。

模型選擇表達式

您可以使用模型選擇表示式來動態驗證相同路由內的請求。如果您為代理或非代理整合提供模型選取表示式,就會發生模型驗證。找不到相符的模型時,您可能需要將 $default 模型定義為回復。如果沒有相符的模型,而且沒有定義 $default,驗證會失敗。選取表示式看起來類似 Route.ModelSelectionExpression 並評估為 Route.RequestModels 的索引鍵。

定義 WebSocket API 的路由時,您可以選擇性地指定模型選取運算式。評估此表達式後,即可選取接收請求時將用於內文驗證的模型。此運算式的判斷值為路由的 requestmodels 其中一個項目。

模型是以 JSON 結構描述來表示,並描述請求本文的資料結構。此選擇表達式本身讓您能夠動態選擇欲用來在執行時間驗證特定路由的模型。如需建立模型的資訊,請參閱 適用於其他 API 的資料模型

使用 API Gateway 主控台設定請求驗證

下列範例說明如何在路由上設定要求驗證。

首先,建立模型,然後建立路線。接下來,您可以在剛建立的路由上設定要求驗證。最後,您部署和測試您的 API。若要完成本教學課程,您需要一個 WebSocket API $request.body.action 作為路由選取運算式,以及新路由的整合端點。

您還需要 wscat 來連線到 API。如需詳細資訊,請參閱 用wscat於連接到 WebSocket API 並向其發送消息

建立裝置
  1. 在以下網址登入 API Gateway 主控台:https://console.aws.amazon.com/apigateway

  2. 選擇一個 WebSocket API。

  3. 在主導覽窗格中,選擇模型

  4. 選擇建立模型

  5. 針對名稱,輸入 emailModel

  6. 針對內容類型,輸入 application/json

  7. 針對模型結構描述,輸入下列模型:

    { "$schema": "http://json-schema.org/draft-04/schema#", "type" : "object", "required" : [ "address"], "properties" : { "address": { "type": "string" } } }

    此模型要求請求包含電子郵件地址。

  8. 選擇儲存

在此步驟中,您會為 WebSocket API 建立路由。

建立路由
  1. 在主導覽窗格中,選擇「路由」。

  2. 選擇 Create route (建立路由)

  3. 對於 Route key (路由金鑰),輸入 sendMessage

  4. 選擇整合類型並指定整合端點。如需更多資訊,請參閱 WebSocket API Gateway 中的 API 整合

  5. 選擇 Create route (建立路由)

在此步驟中,您可以設定sendMessage路由的要求驗證。

若要設定請求驗證
  1. 在 [路由要求] 索引標籤的 [路由要求設定] 下,選擇 [編輯]。

  2. 對於「模型」選取表示式,輸入${request.body.messageType}

    API Gateway 會使用messageType屬性來驗證傳入的要求。

  3. 選擇 [新增請求模型]。

  4. 對於「模型金鑰」,輸入email

  5. 對於「型號」,選擇「電子郵件模

    API Gateway 會email針對此模型驗證內送訊息,並將messageType屬性設定為。

    注意

    如果 API Gateway 無法將模型選取運算式與模型金鑰相符,則會選取$default模型。如果沒有$default模型,則驗證失敗。對於生產 API,我們建議您建立$default模型。

  6. 選擇儲存變更

在此步驟中,您將部署並測試您的 API。

若要部署和測試您的 API
  1. 選擇部署 API

  2. 從下拉式清單中選擇所需的階段,或輸入新階段的名稱。

  3. 選擇部署

  4. 在主導覽窗格中,選擇階段

  5. 複製您的 API WebSocket 網址。URL 看起來應該會像這樣:wss://abcdef123.execute-api.us-east-2.amazonaws.com/production

  6. 打開一個新的終端並使用以下參數運行wscat命令。

    wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
    Connected (press CTRL+C to quit)
  7. 使用以下命令來測試您的 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"}