

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.

# Demande de validation pour WebSocket APIs in API Gateway
<a name="websocket-api-request-validation"></a>

Vous pouvez configurer API Gateway afin qu’il exécute la validation d’une requête 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
<a name="apigateway-websocket-api-model-selection-expressions"></a>

Vous pouvez utiliser une expression de sélection de modèle pour valider dynamiquement les requêtes 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 autres que de 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 requête. L’expression correspond à l’une des entrées de l’élément d’une route [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes.html#apis-apiid-routes-prop-route-requestmodels](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes.html#apis-apiid-routes-prop-route-requestmodels).

Un modèle est exprimé sous forme de [schéma JSON](https://datatracker.ietf.org/doc/html/draft-zyp-json-schema-04) et décrit la structure des données du corps de la requête. 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 REST APIs](models-mappings-models.md). 

## Configuration de la validation des requêtes à l’aide de la console API Gateway
<a name="apigateway-websocket-api-model-selection-expression-example"></a>

L’exemple suivant vous montre comment configurer une validation des demandes sur une route.

 Vous devez d’abord créer un modèle, puis une route. Ensuite, vous devez configurer la validation des demandes sur la route que vous venez de créer. Enfin, vous devez déployer et tester 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 de plus amples informations, veuillez consulter [`wscat`À utiliser pour se connecter à une WebSocket API et y envoyer des messages](apigateway-how-to-call-websocket-api-wscat.md).

**Pour créer un modèle**

1. Connectez-vous à la console API Gateway à l'adresse [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Choisissez une WebSocket API.

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

1. Sélectionnez **Créer un modèle**.

1. Pour **Nom**, saisissez **emailModel**.

1. Pour **Type de contenu**, entrez **application/json**.

1. 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 requête contienne une adresse e-mail.

1. 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, sélectionnez **Routes**.

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

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

1. 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 APIs in API Gateway](apigateway-websocket-api-integrations.md).

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

Au cours de cette étape, vous allez configurer la validation des demandes pour la route `sendMessage`.

**Pour configurer une validation des demandes**

1. Dans l’onglet **Requête de routage**, sous **Paramètres de requête de routage**, choisissez **Modifier**.

1. Pour **Expression de sélection de modèle**, saisissez **\$1\$1request.body.messageType\$1**.

   API Gateway utilise la propriété `messageType` pour valider la requête entrante.

1. Choisissez **Ajouter un modèle de requête**.

1. Pour **Clé de modèle**, saisissez **email**.

1. Pour **Modèle**, choisissez **emailModel**.

   API Gateway valide les messages entrants avec la propriété `messageType` définie sur `email` pour 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, le modèle `$default` est sélectionné. S’il n’y a pas de modèle `$default`, la validation échoue. Pour la production APIs, nous vous recommandons de créer un `$default` modèle.

1. Sélectionnez **Enregistrer les modifications**.

Au cours de cette étape, vous allez déployer et tester votre API.

**Pour déployer et tester votre API**

1. Sélectionnez **Deploy API (Déployer une API)**.

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

1. Choisissez **Déployer**.

1. Dans le volet de navigation principal, choisissez **Étapes**.

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

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

   ```
   wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
   ```

   ```
   Connected (press CTRL+C to quit)
   ```

1. Utilisez la commande suivante pour tester votre API.

   ```
   {"action": "sendMessage", "messageType": "email"}
   ```

   ```
   {"message": "Invalid request body", "connectionId":"ABCD1=234", "requestId":"EFGH="}
   ```

   API Gateway rejettera la requête.

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

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