Validierung für WebSocket APIs in API Gateway anfordern - Amazon API Gateway

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Validierung für WebSocket APIs in API Gateway anfordern

Sie können API Gateway so konfigurieren, dass die Validierung einer Routenanforderung durchgeführt wird, bevor Sie mit der Integrationsanforderung fortfahren. Wenn die Validierung fehlschlägt, schlägt API Gateway die Anfrage fehl, ohne Ihr Backend aufzurufen, sendet eine Gateway-Antwort „Bad Request Body“ an den Client und veröffentlicht die Validierungsergebnisse in CloudWatch Logs. Die Verwendung der Validierung auf diese Weise reduziert unnötige Aufrufe an Ihr API-Backend.

Modell-Auswahlausdrücke

Sie können einen Modell-Auswahlausdruck verwenden, um Anforderungen innerhalb derselben Route dynamisch zu validieren. Die Modellvalidierung erfolgt, wenn Sie einen Modell-Auswahlausdruck für Proxy- oder Nicht-Proxy-Integrationen bereitstellen. Möglicherweise müssen Sie das $default-Modell als Fallback definieren, wenn kein passendes Modell gefunden wird. Wenn kein übereinstimmendes Modell vorhanden ist und $default nicht definiert ist, schlägt die Validierung fehl. Der Auswahlausdruck ähnelt Route.ModelSelectionExpression und wertet den Schlüssel für Route.RequestModels aus.

Wenn Sie eine Route für eine WebSocket API definieren, können Sie optional einen Modellauswahlausdruck angeben. Dieser Ausdruck wird zur Auswahl des Modells ausgewertet, das bei Eingang einer Anforderung für die Textvalidierung verwendet werden soll. Der Ausdruck wird auf einen der Einträge in den einer Route ausgewertet requestmodels.

Ein Modell wird als JSON-Schema ausgedrückt und beschreibt die Datenstruktur des Anforderungstextes. Die Beschaffenheit dieses Auswahlausdrucks ermöglicht Ihnen, dynamisch das Modell auszuwählen, über das zur Laufzeit für eine bestimmte Route validiert werden soll. Weitere Informationen, wie Sie ein Modell erstellen können, finden Sie unter Datenmodelle für REST-APIs.

Einrichten der grundlegenden Anforderungsvalidierung über die API-Gateway-Konsole

Das folgende Beispiel zeigt Ihnen, wie Sie die Anforderungsvalidierung für eine Route einrichten.

Zuerst erstellen Sie ein Modell und dann eine Route. Als Nächstes konfigurieren Sie die Anforderungsvalidierung für die Route, die Sie gerade erstellt haben. Schließlich stellen Sie Ihre API bereit und testen sie. Um dieses Tutorial abzuschließen, benötigen Sie eine WebSocket API $request.body.action als Routenauswahlausdruck und einen Integrationsendpunkt für Ihre neue Route.

Sie benötigen außerdem wscat, um eine Verbindung zu Ihrer API herzustellen. Weitere Informationen finden Sie unter Wird verwendetwscat, um eine Verbindung zu einer WebSocket API herzustellen und Nachrichten an diese zu senden.

So erstellen Sie ein Modell
  1. Melden Sie sich bei der API-Gateway-Konsole unter https://console.aws.amazon.com/apigateway an.

  2. Wählen Sie eine WebSocket API.

  3. Klicken Sie im Navigationsbereich auf Models (Modelle).

  4. Wählen Sie Modell erstellen aus.

  5. Geben Sie unter Name emailModel ein.

  6. Geben Sie für Content type (Inhaltstyp) application/json ein.

  7. Geben Sie für Modellschema Folgendes ein:

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

    Dieses Modell erfordert, dass die Anfrage eine E-Mail-Adresse enthält.

  8. Wählen Sie Speichern.

In diesem Schritt erstellen Sie eine Route für Ihre WebSocket API.

Erstellen Sie eine Route.
  1. Wählen Sie im Hauptnavigationsbereich Routes aus.

  2. Wählen Sie Create route (Route erstellen) aus.

  3. Geben Sie in Route key (Routenschlüssel) sendMessage ein.

  4. Wählen Sie einen Integrationstyp und geben Sie einen Integrationsendpunkt an. Weitere Informationen finden Sie unter Integrationen für WebSocket API in API Gateway.

  5. Wählen Sie Create route (Route erstellen) aus.

In diesem Schritt richten Sie die Anforderungsvalidierung für die sendMessage Route ein.

Um die Anforderungsvalidierung einzurichten
  1. Wählen Sie auf der Registerkarte Routenanfrage unter Einstellungen für Routenanfragen die Option Bearbeiten aus.

  2. Geben Sie als Ausdruck für die Modellauswahl den Wert ein${request.body.messageType}.

    API Gateway verwendet die messageType Eigenschaft, um die eingehende Anfrage zu validieren.

  3. Wählen Sie Anforderungsmodell hinzufügen aus.

  4. Geben Sie als Modellschlüssel einemail.

  5. Wählen Sie als Modell die Option EmailModel aus.

    API Gateway validiert eingehende Nachrichten, bei denen die messageType Eigenschaft auf gesetzt ist, email anhand dieses Modells.

    Anmerkung

    Wenn API Gateway den Modellauswahlausdruck nicht mit einem Modellschlüssel abgleichen kann, wählt es das $default Modell aus. Wenn kein $default Modell vorhanden ist, schlägt die Validierung fehl. Für Produktions-APIs empfehlen wir, ein $default Modell zu erstellen.

  6. Wählen Sie Änderungen speichern aus.

In diesem Schritt stellen Sie Ihre API bereit und testen sie.

Um Ihre API bereitzustellen und zu testen
  1. Klicken Sie auf Deploy API.

  2. Wählen Sie die gewünschte Stufe aus der Dropdown-Liste aus oder geben Sie den Namen einer neuen Stufe ein.

  3. Wählen Sie Bereitstellen.

  4. Klicken Sie im Hauptnavigationsbereich auf Stages (Stufen).

  5. Kopieren Sie die WebSocket URL Ihrer API. Die URL sollte wie wss://abcdef123.execute-api.us-east-2.amazonaws.com/production aussehen.

  6. Öffnen Sie ein neues Terminal und führen Sie den wscat Befehl mit den folgenden Parametern aus.

    wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
    Connected (press CTRL+C to quit)
  7. Verwenden Sie den folgenden Befehl, um Ihre API zu testen.

    {"action": "sendMessage", "messageType": "email"}
    {"message": "Invalid request body", "connectionId":"ABCD1=234", "requestId":"EFGH="}

    API Gateway schlägt die Anfrage fehl.

    Verwenden Sie den nächsten Befehl, um eine gültige Anfrage an Ihre API zu senden.

    {"action": "sendMessage", "messageType": "email", "address": "mary_major@example.com"}