Demander la validation des WebSocket API dans API Gateway - Amazon API Gateway

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Demander la validation des WebSocket API dans API Gateway

Vous pouvez configurer API Gateway afin qu'il exécute la validation d'une demande de routage avant de continuer avec la demande d'intégration. Si la validation échoue, API Gateway échoue à la demande sans appeler votre backend, envoie une réponse de passerelle « Bad request body » au client et publie les résultats de la validation dans les CloudWatch journaux. L'utilisation de la validation de cette façon réduit les appels inutiles vers votre back-end d'API.

Expressions de sélection du modèle

Vous pouvez utiliser une expression de sélection de modèle pour valider dynamiquement les demandes au sein d'une même route. La validation du modèle se produit si vous fournissez une expression de sélection de modèle pour les intégrations proxy ou non proxy. Vous devrez peut-être définir le modèle $default comme solution de secours si aucun modèle correspondant n'est trouvé. S'il n'y a pas de modèle correspondant et que $default n'est pas défini, la validation échoue. L'expression de sélection ressemble à Route.ModelSelectionExpression et évalue à la clé pour Route.RequestModels.

Lorsque vous définissez un itinéraire pour une WebSocket API, vous pouvez éventuellement spécifier une expression de sélection de modèle. Cette expression est évaluée pour sélectionner le modèle à utiliser pour la validation du corps lors de la réception d'une demande. L'expression correspond à l'une des entrées de l'élément d'une route requestmodels.

Un modèle est exprimé sous forme de schéma JSON et décrit la structure des données du corps de la demande. La nature de ces expressions de sélection vous permet de choisir de manière dynamique le modèle à utiliser pour la validation lors de l'exécution pour une route particulière. Pour plus d'informations sur la création d'un modèle, consultez la section Modèles de données pour les API REST.

Configuration la validation des demandes à l'aide de la console API Gateway

L'exemple suivant montre comment configurer la validation des demandes sur un itinéraire.

Tout d'abord, vous créez un modèle, puis vous créez un itinéraire. Ensuite, vous configurez la validation des demandes sur l'itinéraire que vous venez de créer. Enfin, vous déployez et testez votre API. Pour terminer ce didacticiel, vous avez besoin d'une WebSocket API $request.body.action servant d'expression de sélection d'itinéraire et d'un point de terminaison d'intégration pour votre nouvel itinéraire.

Vous avez également besoin de wscat pour vous connecter à votre API. Pour plus d’informations, consultez wscatÀ utiliser pour se connecter à une WebSocket API et y envoyer des messages.

Pour créer un modèle
  1. Connectez-vous à la console API Gateway à l'adresse : https://console.aws.amazon.com/apigateway.

  2. Choisissez une WebSocket API.

  3. Dans le volet de navigation principal, choisissez Modèles.

  4. Sélectionnez Create model.

  5. Pour Name (Nom), saisissez emailModel.

  6. Pour Type de contenu, entrez application/json.

  7. Pour Schéma du modèle, saisissez le modèle qui suit :

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

    Ce modèle nécessite que la demande contienne une adresse e-mail.

  8. Choisissez Enregistrer.

Au cours de cette étape, vous allez créer un itinéraire pour votre WebSocket API.

Pour créer une route
  1. Dans le volet de navigation principal, choisissez Routes.

  2. Choisissez Create Route (Créer un itinéraire).

  3. Pour Route key (Clé de route), entrez sendMessage.

  4. Choisissez un type d'intégration et spécifiez un point de terminaison d'intégration. Pour plus d’informations, consultez Intégrations pour WebSocket l'API dans API Gateway.

  5. Choisissez Create Route (Créer un itinéraire).

Au cours de cette étape, vous configurez la validation des demandes pour l'sendMessageitinéraire.

Pour configurer la validation des demandes
  1. Dans l'onglet Demande d'itinéraire, sous Paramètres de demande d'itinéraire, choisissez Modifier.

  2. Pour Expression de sélection du modèle, entrez${request.body.messageType}.

    API Gateway utilise cette messageType propriété pour valider la demande entrante.

  3. Choisissez Ajouter un modèle de demande.

  4. Pour Clé du modèle, entrezemail.

  5. Pour Modèle, choisissez EmailModel.

    API Gateway valide les messages entrants avec la messageType propriété définie sur par email rapport à ce modèle.

    Note

    Si API Gateway ne parvient pas à faire correspondre l'expression de sélection du modèle à une clé de modèle, elle sélectionne le $default modèle. S'il n'existe aucun $default modèle, la validation échoue. Pour les API de production, nous vous recommandons de créer un $default modèle.

  6. Sélectionnez Enregistrer les modifications.

Au cours de cette étape, vous déployez et testez votre API.

Pour déployer et tester votre API
  1. Sélectionnez Deploy API (Déployer une API).

  2. Choisissez l'étape souhaitée dans la liste déroulante ou saisissez le nom d'une nouvelle étape.

  3. Choisissez Deploy (Déployer).

  4. Dans le volet de navigation principal, choisissez Étapes.

  5. Copiez l' WebSocket URL de votre API. L'URL doit ressembler à wss://abcdef123.execute-api.us-east-2.amazonaws.com/production.

  6. Ouvrez un nouveau terminal et exécutez la wscat commande avec les paramètres suivants.

    wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
    Connected (press CTRL+C to quit)
  7. Utilisez la commande suivante pour tester votre API.

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

    API Gateway échouera à la demande.

    Utilisez la commande suivante pour envoyer une demande valide à votre API.

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