Configuration de la validation de demande de base dans API Gateway
Cette section explique comment configurer la validation des demandes pour API Gateway à l’aide de la console, de l’interface AWS CLI et d’une définition OpenAPI.
Rubriques
Configuration la validation des demandes à l’aide de la console API Gateway
Vous pouvez utiliser la console API Gateway pour valider une demande en sélectionnant l’un des trois validateurs suivants pour une demande d’API :
-
Valider le corps.
-
Valider les paramètres de chaîne de requête et les en-têtes.
-
Valider le corps et les paramètres et en-têtes des chaînes de requête.
Lorsque vous appliquez l’un des validateurs sur une méthode d’API, la console API Gateway ajoute le validateur au mappage RequestValidators de l’API.
Pour suivre ce didacticiel, vous allez utiliser un modèle AWS CloudFormation pour créer une API API Gateway incomplète. Cette API possède une ressource /validator
avec les méthodes GET
et POST
. Ces deux méthodes sont intégrées avec le point de terminaison HTTP http://petstore-demo-endpoint.execute-api.com/petstore/pets
. Vous allez configurer deux types de validation des demandes :
-
Dans la méthode
GET
, vous allez configurer la validation des demandes pour les paramètres de chaîne de requête d’URL. -
Dans la méthode
POST
, vous allez configurer la validation des demandes pour le corps de la demande.
Cela permettra uniquement à certains appels d’API d’être transmis à l’API.
Téléchargez et décompressez le modèle de création d’application pour AWS CloudFormation. Vous allez utiliser ce modèle pour créer une API incomplète. Vous terminerez les étapes restantes dans la console API Gateway.
Pour créer une pile AWS CloudFormation
Ouvrez la console AWS CloudFormation, à l’adresse https://console.aws.amazon.com/cloudformation
. -
Choisissez Créer une pile, puis choisissez Avec de nouvelles ressources (standard).
-
Dans Spécifier le modèle, choisissez Charger un modèle de fichier.
-
Sélectionnez le modèle que vous avez téléchargé.
-
Choisissez Suivant.
-
Pour Nom de la pile, saisissez
request-validation-tutorial-console
, puis choisissez Suivant. -
Pour Configurer les options de pile, choisissez Suivant.
-
Pour Capacités, sachez que AWS CloudFormation peut créer des ressources IAM dans votre compte.
-
Sélectionnez Envoyer.
AWS CloudFormation fournit les ressources spécifiées dans le modèle. La fin du provisionnement de vos ressources peut prendre quelques minutes. Lorsque le statut de votre pile AWS CloudFormation est CREATE_COMPLETE, vous êtes prêt à passer à l’étape suivante.
Pour sélectionner l’API que vous venez de créer
Sélectionnez la pile
request-validation-tutorial-console
nouvellement créée.Sélectionnez Ressources.
Sous ID physique, choisissez votre API. Ce lien vous dirigera vers la console API Gateway.
Avant de modifier les méthodes GET
et POST
, vous devez créer un modèle.
Pour créer un modèle
-
Un modèle est requis pour utiliser la validation des demandes sur le corps d’une demande entrante. Pour créer un modèle, dans le volet de navigation principal, choisissez Modèles.
-
Sélectionnez Create model.
-
Pour Name (Nom), saisissez
PetStoreModel
. -
Pour Type de contenu, entrez
application/json
. Si aucun type de contenu correspondant n’est trouvé, la validation de demande n’est pas effectuée. Pour utiliser le même modèle quel que soit le type de contenu, saisissez$default
. -
Pour Description, saisissez
My PetStore Model
comme description du modèle. -
Pour Schéma du modèle, collez le modèle suivant dans l’éditeur de code, puis choisissez Créer.
{ "type" : "object", "required" : [ "name", "price", "type" ], "properties" : { "id" : { "type" : "integer" }, "type" : { "type" : "string", "enum" : [ "dog", "cat", "fish" ] }, "name" : { "type" : "string" }, "price" : { "type" : "number", "minimum" : 25.0, "maximum" : 500.0 } } }
Pour plus d’informations sur le modèle, consultez Modèles de données pour les API REST.
Pour configurer la validation de requête pour une méthode GET
-
Dans le volet de navigation principal, choisissez Ressources, puis sélectionnez la méthode GET.
-
Dans l’onglet Demande de méthode, sous Paramètres de demande de méthode, choisissez Modifier.
-
Pour Validateur de requête, sélectionnez Valider les paramètres de chaîne de requête et les en-têtes.
Sous Paramètres de chaîne de requête d’URL, procédez comme suit :
Sélectionnez Add query string (Ajouter une chaîne de requêtes).
Pour Name (Nom), saisissez
petType
.Activez Obligatoire.
Maintenez Mise en cache désactivée.
-
Choisissez Enregistrer.
-
Dans l’onglet Requête d’intégration, sous Paramètres de requête d’intégration, choisissez Modifier.
Sous Paramètres de chaîne de requête d’URL, procédez comme suit :
Sélectionnez Add query string (Ajouter une chaîne de requêtes).
Pour Name (Nom), saisissez
petType
.Pour Mappage à partir de, entrez
method.request.querystring.petType
. Cela mappepetType
au type d’animal de compagnie.Pour plus d’informations sur le mappage des données, consultez le didacticiel sur le mappage des données.
Maintenez Mise en cache désactivée.
Choisissez Enregistrer.
Pour tester la validation des requêtes pour la méthode GET
-
Choisissez l’onglet Test. Vous devrez peut-être choisir la flèche droite pour afficher l’onglet.
-
Pour Chaînes de requête, saisissez
petType=dog
, puis choisissez Tester. -
Le test de méthode renverra
200 OK
et une liste de chiens.Pour obtenir des informations sur la façon de transformer ces données de sortie, consultez le didacticiel sur le mappage des données.
-
Supprimez
petType=dog
et choisissez Tester. -
Le test de méthode renverra une erreur
400
avec le message d’erreur suivant :{ "message": "Missing required request parameters: [petType]" }
Pour configurer la validation de requête pour la méthode POST
-
Dans le volet de navigation principal, sélectionnez Ressources, puis sélectionnez la méthode POST.
-
Dans l’onglet Demande de méthode, sous Paramètres de demande de méthode, choisissez Modifier.
-
Pour Validateur de requête, sélectionnez Valider le corps.
-
Sous Corps de la requête, choisissez Ajouter un modèle.
-
Pour Type de contenu, entrez
application/json
. Si aucun type de contenu correspondant n’est trouvé, la validation de demande n’est pas effectuée. Pour utiliser le même modèle quel que soit le type de contenu, saisissez$default
.Pour Modèle, sélectionnez PetStoreModel.
Choisissez Enregistrer.
Pour tester la validation de requête pour une méthode POST
-
Choisissez l’onglet Test. Vous devrez peut-être choisir la flèche droite pour afficher l’onglet.
-
Sous Corps de la requête, collez ce qui suit dans l’éditeur de code :
{ "id": 2, "name": "Bella", "type": "dog", "price": 400 }
Sélectionnez Test.
-
Le test de méthode renverra
200 OK
et un message de réussite. -
Sous Corps de la requête, collez ce qui suit dans l’éditeur de code :
{ "id": 2, "name": "Bella", "type": "dog", "price": 4000 }
Sélectionnez Test.
-
Le test de méthode renverra une erreur
400
avec le message d’erreur suivant :{ "message": "Invalid request body" }
Au bas des journaux de test, la raison pour laquelle le corps de la requête est non valide est renvoyée. Dans ce cas, le prix de l’animal de compagnie était supérieur au maximum spécifié dans le modèle.
Pour supprimer une pile AWS CloudFormation
Ouvrez la console AWS CloudFormation, à l’adresse https://console.aws.amazon.com/cloudformation
. -
Sélectionnez votre pile AWS CloudFormation.
-
Choisissez Supprimer, puis confirmez votre choix.
Étapes suivantes
Pour obtenir des informations sur la façon de transformer les données de sortie et d’effectuer plus de mappage des données, consultez le didacticiel sur le mappage des données.
Suivez le didacticiel Configuration d’une validation de base des demandes à l’aide de l’interface AWS CLI, pour effectuer des étapes similaires à l’aide de l’interface AWS CLI.
Configuration de la validation de base des demandes à l’aide de l’interface AWS CLI
Vous pouvez créer un validateur pour configurer la validation des demandes à l’aide de l’interface AWS CLI. Pour suivre ce didacticiel, vous allez utiliser un modèle AWS CloudFormation pour créer une API API Gateway incomplète.
Note
Il ne s’agit pas du même modèle AWS CloudFormation qu’avec le didacticiel de la console.
À l’aide d’une ressource /validator
pré-exposée, vous allez créer les méthodes GET
et POST
. Ces deux méthodes seront intégrées avec le point de terminaison HTTP http://petstore-demo-endpoint.execute-api.com/petstore/pets
. Vous allez configurer les deux validations de demandes suivantes :
-
Sur la méthode
GET
, vous allez créer un validateurparams-only
pour valider les paramètres de chaîne de requête d’URL. -
Sur la méthode
POST
, vous allez créer un validateurbody-only
pour valider le corps de la demande.
Cela permettra uniquement à certains appels d’API d’être transmis à l’API.
Pour créer une pile AWS CloudFormation
Téléchargez et décompressez le modèle de création d’application pour AWS CloudFormation.
Pour effectuer le didacticiel suivant, vous avez besoin de l’AWS Command Line Interface (AWS CLI) version 2.
Pour les commandes longues, un caractère d’échappement (\
) est utilisé pour les fractionner en plusieurs lignes.
Note
Dans Windows, certaines commandes CLI Bash que vous utilisez couramment (par exemple zip
) ne sont pas prises en charge par les terminaux intégrés du système d’exploitation. Installez le sous-système Windows pour Linux
Utilisez la commande suivante pour créer la pile AWS CloudFormation.
aws cloudformation create-stack --stack-name request-validation-tutorial-cli --template-body file://request-validation-tutorial-cli.zip --capabilities CAPABILITY_NAMED_IAM
-
AWS CloudFormation fournit les ressources spécifiées dans le modèle. La fin du provisionnement de vos ressources peut prendre quelques minutes. Utilisez la commande suivante pour voir le statut de votre pile AWS CloudFormation.
aws cloudformation describe-stacks --stack-name request-validation-tutorial-cli
-
Lorsque le statut de votre pile AWS CloudFormation est
StackStatus: "CREATE_COMPLETE"
, utilisez la commande suivante pour récupérer les valeurs de sortie pertinentes pour les étapes à venir.aws cloudformation describe-stacks --stack-name request-validation-tutorial-cli --query "Stacks[*].Outputs[*].{OutputKey: OutputKey, OutputValue: OutputValue, Description: Description}"
Les valeurs de sortie sont les suivantes :
ApiId, qui est l’ID de l’API. Pour ce didacticiel, l’ID d’API est
abc123
.ResourceId, qui est l’ID de la ressource de validateur où les méthodes
GET
etPOST
sont exposées. Pour ce didacticiel, l’ID de ressource estefg456
.
Pour créer les validateurs de demandes et importer un modèle
-
Un validateur est requis pour utiliser la validation des demandes avec l’interface AWS CLI. Utilisez la commande suivante pour créer un validateur qui valide uniquement les paramètres de demande.
aws apigateway create-request-validator --rest-api-id
abc123
\ --no-validate-request-body \ --validate-request-parameters \ --name params-onlyNotez l’ID du validateur
params-only
. -
Utilisez la commande suivante pour créer un validateur qui valide uniquement le corps de la demande.
aws apigateway create-request-validator --rest-api-id
abc123
\ --validate-request-body \ --no-validate-request-parameters \ --name body-onlyNotez l’ID du validateur
body-only
. -
Un modèle est requis pour utiliser la validation des demandes sur le corps d’une demande entrante. Utilisez la commande suivante pour importer un modèle.
aws apigateway create-model --rest-api-id
abc123
--name PetStoreModel --description 'My PetStore Model' --content-type 'application/json' --schema '{"type": "object", "required" : [ "name", "price", "type" ], "properties" : { "id" : {"type" : "integer"},"type" : {"type" : "string", "enum" : [ "dog", "cat", "fish" ]},"name" : { "type" : "string"},"price" : {"type" : "number","minimum" : 25.0, "maximum" : 500.0}}}}'Si aucun type de contenu correspondant n’est trouvé, la validation de demande n’est pas effectuée. Pour utiliser le même modèle quel que soit le type de contenu, spécifiez
$default
comme clé.
Pour créer les méthodes GET
et POST
-
Utilisez la commande suivante pour ajouter la méthode HTTP
GET
sur la ressource/validate
. Cette commande crée la méthodeGET
, ajoute le validateurparams-only
et définit la chaîne de requêtepetType
selon les besoins.aws apigateway put-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --authorization-type "NONE" \ --request-validator-idaaa111
\ --request-parameters "method.request.querystring.petType=true"Utilisez la commande suivante pour ajouter la méthode HTTP
POST
sur la ressource/validate
. Cette commande crée la méthodePOST
, ajoute le validateurbody-only
et attache le modèle au validateur de corps uniquement.aws apigateway put-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --authorization-type "NONE" \ --request-validator-idbbb222
\ --request-models 'application/json'=PetStoreModel -
Utilisez la commande suivante pour configurer la réponse
200 OK
de la méthodeGET /validate
.aws apigateway put-method-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --status-code 200Utilisez la commande suivante pour configurer la réponse
200 OK
de la méthodePOST /validate
.aws apigateway put-method-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --status-code 200 -
Utilisez la commande suivante pour configurer une
Integration
avec un point de terminaison HTTP spécifié pour la méthodeGET /validation
.aws apigateway put-integration --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --type HTTP \ --integration-http-method GET \ --request-parameters '{"integration.request.querystring.type" : "method.request.querystring.petType"}' \ --uri 'http://petstore-demo-endpoint.execute-api.com/petstore/pets'Utilisez la commande suivante pour configurer une
Integration
avec un point de terminaison HTTP spécifié pour la méthodePOST /validation
.aws apigateway put-integration --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --type HTTP \ --integration-http-method GET \ --uri 'http://petstore-demo-endpoint.execute-api.com/petstore/pets' -
Utilisez la commande suivante pour configurer une réponse d’intégration pour la méthode
GET /validation
.aws apigateway put-integration-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --status-code 200 \ --selection-pattern ""Utilisez la commande suivante pour configurer une réponse d’intégration pour la méthode
POST /validation
.aws apigateway put-integration-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --status-code 200 \ --selection-pattern ""
Pour tester l’API
-
Pour tester la méthode
GET
qui effectuera la validation des demandes pour les chaînes de requête, utilisez la commande suivante :aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --path-with-query-string '/validate?petType=dog'Le résultat sera
200 OK
et une liste de chiens. -
Utilisez la commande suivante pour tester sans inclure la chaîne de requête
petType
.aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GETLe résultat sera une erreur
400
. -
Pour tester la méthode
POST
qui effectuera la validation des demandes pour le corps de la demande, utilisez la commande suivante :aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --body '{"id": 1, "name": "bella", "type": "dog", "price" : 400 }'Le résultat sera
200 OK
et un message de réussite. -
Utilisez la commande suivante pour tester en utilisant un corps non valide.
aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --body '{"id": 1, "name": "bella", "type": "dog", "price" : 1000 }'Le résultat sera une erreur
400
, car le prix du chien est supérieur au prix maximum défini par le modèle.
Pour supprimer une pile AWS CloudFormation
Utilisez la commande suivante pour supprimer vos ressources AWS CloudFormation.
aws cloudformation delete-stack --stack-name request-validation-tutorial-cli
Configuration de la validation de base des demandes à l’aide d’une définition OpenAPI
Vous pouvez déclarer un validateur de demande au niveau de l’API en spécifiant un ensemble d’objets Objet x-amazon-apigateway-request-validators.requestValidator dans le mappage d’Objet x-amazon-apigateway-request-validators afin de sélectionner la partie de la demande qui sera validée. Dans l’exemple de définition OpenAPI, il existe deux validateurs :
Le validateur
all
qui valide à la fois le corps, à l’aide du modèle de donnéesRequestBodyModel
, et les paramètres.Le modèle de données
RequestBodyModel
exige que l’objet JSON en entrée contienne les propriétésname
,type
etprice
. La propriéténame
peut être une chaîne,type
doit être l’un de champs d’énumération spécifiés (["dog", "cat", "fish"]
) etprice
doit être compris entre 25 et 500. Le paramètreid
n’est pas obligatoire.Le validateur
param-only
qui valide uniquement les paramètres.
Pour activer un validateur de demande sur toutes les méthodes d’une API, spécifiez une propriété Propriété x-amazon-apigateway-request-validator au niveau de l’API de la définition OpenAPI. Dans l’exemple de définition OpenAPI, le validateur all
est utilisé sur toutes les méthodes d’API, sauf s’il est remplacé. Lorsque vous utilisez un modèle pour valider le corps et qu’aucun type de contenu correspondant n’est trouvé, la validation de demande n’est pas effectuée. Pour utiliser le même modèle quel que soit le type de contenu, spécifiez $default
comme clé.
Pour activer un validateur de demande sur une méthode individuelle, spécifiez la propriété x-amazon-apigateway-request-validator
au niveau de la méthode. Dans cet exemple de définition OpenAPI, le validateur param-only
remplace le validateur all
sur la méthode GET
.
Pour importer l’exemple OpenAPI dans API Gateway, consultez les instructions suivantes pour réaliser l’Importation d’une API régionale dans API Gateway ou l’Importation d’une API optimisée pour la périphérie dans API Gateway.