

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.

# Configuration de la validation de demande de base dans API Gateway
<a name="api-gateway-request-validation-set-up"></a>

 Cette section explique comment configurer la validation des demandes pour API Gateway à l'aide de la console et d'une définition OpenAPI. AWS CLI

**Topics**
+ [Configuration la validation des demandes à l’aide de la console API Gateway](#api-gateway-request-validation-setup-in-console)
+ [Configurez la validation de base des demandes à l'aide du AWS CLI](#api-gateway-request-validation-setup-cli)
+ [Configuration de la validation de base des demandes à l’aide d’une définition OpenAPI](#api-gateway-request-validation-setup-importing-swagger)

## Configuration la validation des demandes à l’aide de la console API Gateway
<a name="api-gateway-request-validation-setup-in-console"></a>

 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 à une méthode d'API, la console API Gateway ajoute le validateur à la carte de [RequestValidators](https://docs.aws.amazon.com/apigateway/latest/api/API_RequestValidator.html)l'API.

Pour suivre ce didacticiel, vous allez utiliser un CloudFormation modèle 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 CloudFormation](samples/request-validation-tutorial-console.zip). 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 CloudFormation pile**

1. Ouvrez la CloudFormation console à l'adresse [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Choisissez **Créer une pile**, puis choisissez **Avec de nouvelles ressources (standard).**

1. Dans **Spécifier le modèle**, choisissez **Charger un modèle de fichier**.

1. Sélectionnez le modèle que vous avez téléchargé.

1. Choisissez **Suivant**. 

1. Pour **Nom de la pile**, saisissez **request-validation-tutorial-console**, puis choisissez **Suivant**.

1. Pour **Configurer les options de pile**, choisissez **Suivant**.

1. Pour les **fonctionnalités**, reconnaissez que CloudFormation vous pouvez créer des ressources IAM dans votre compte.

1. Choisissez **Suivant**, puis **Soumettre**.

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 CloudFormation pile est **CREATE\$1COMPLETE**, vous êtes prêt à passer à l'étape suivante.

**Pour sélectionner l’API que vous venez de créer**

1. Sélectionnez la pile **request-validation-tutorial-console** nouvellement créée.

1. Sélectionnez **Ressources**.

1. 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**

1. 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**.

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

1. Pour **Nom**, saisissez **PetStoreModel**.

1. 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 **\$1default**.

1. Pour **Description**, saisissez **My PetStore Model** comme description du modèle.

1. 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 REST APIs](models-mappings-models.md). 

**Pour configurer la validation de requête pour une méthode `GET`**

1. Dans le volet de navigation principal, choisissez **Ressources**, puis sélectionnez la méthode **GET**. 

1. Dans l’onglet **Demande de méthode**, sous **Paramètres de requête de méthode**, choisissez **Modifier**.

1. Pour **Validateur de requête**, sélectionnez **Valider les paramètres de chaîne de requête et les en-têtes**.

1. Sous **Paramètres de chaîne de requête d’URL**, procédez comme suit : 

   1. Sélectionnez **Add query string** (Ajouter une chaîne de requêtes).

   1. Pour **Nom**, saisissez **petType**.

   1. Activez **Obligatoire**.

   1. Maintenez **Mise en cache** désactivée. 

1. Choisissez **Enregistrer**.

1. Dans l’onglet **Requête d’intégration**, sous **Paramètres de requête d’intégration**, choisissez **Modifier**.

1. Sous **Paramètres de chaîne de requête d’URL**, procédez comme suit : 

   1. Sélectionnez **Add query string** (Ajouter une chaîne de requêtes).

   1. Pour **Nom**, saisissez **petType**.

   1. Pour **Mappage à partir de**, entrez **method.request.querystring.petType**. Cela mappe **petType** 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](set-up-data-transformations-in-api-gateway.md#mapping-example-console).

   1. Maintenez **Mise en cache** désactivée. 

1. Choisissez **Enregistrer**.

**Pour tester la validation des requêtes pour la méthode `GET`**

1. Choisissez l’onglet **Test**. Vous devrez peut-être choisir la flèche droite pour afficher l’onglet.

1. Pour **Chaînes de requête**, saisissez **petType=dog**, puis choisissez **Tester**.

1. 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](set-up-data-transformations-in-api-gateway.md#mapping-example-console).

1. Supprimez **petType=dog** et choisissez **Tester**. 

1.  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`**

1. Dans le volet de navigation principal, sélectionnez **Ressources**, puis sélectionnez la méthode **POST**. 

1. Dans l’onglet **Demande de méthode**, sous **Paramètres de requête de méthode**, choisissez **Modifier**.

1. Pour **Validateur de requête**, sélectionnez **Valider le corps**.

1. Sous **Corps de la requête**, choisissez **Ajouter un modèle**.

1. 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**.

1. Choisissez **Enregistrer**.

**Pour tester la validation de requête pour une méthode `POST`**

1. Choisissez l’onglet **Test**. Vous devrez peut-être choisir la flèche droite pour afficher l’onglet.

1. 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 **Tester)**.

1. Le test de méthode renverra `200 OK` et un message de réussite. 

1. 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 **Tester)**. 

1.  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 CloudFormation pile**

1. Ouvrez la CloudFormation console à l'adresse [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Sélectionnez votre CloudFormation pile.

1. Choisissez **Supprimer**, puis confirmez votre choix.

### Étapes suivantes
<a name="next-steps-request-validation-tutorial"></a>
+ 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](set-up-data-transformations-in-api-gateway.md#mapping-example-console).
+ Suivez le didacticiel [Configuration d’une validation de base des demandes à l’aide de l’interface  AWS CLI](#api-gateway-request-validation-setup-cli), pour effectuer des étapes similaires à l’aide de l’interface  AWS CLI. 

## Configurez la validation de base des demandes à l'aide du AWS CLI
<a name="api-gateway-request-validation-setup-cli"></a>

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 CloudFormation modèle pour créer une API API Gateway incomplète. 

**Note**  
Il ne s'agit pas du même CloudFormation modèle que 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 validateur `params-only` pour valider les paramètres de chaîne de requête d’URL.
+ Sur la méthode `POST`, vous allez créer un validateur `body-only` pour valider le corps de la demande.

 Cela permettra uniquement à certains appels d'API d'être transmis à l'API. 

**Pour créer une CloudFormation pile**

Téléchargez et décompressez [le modèle de création d'application pour CloudFormation](samples/request-validation-tutorial-cli.zip). 

Pour effectuer le didacticiel suivant, vous avez besoin de l’[AWS Command Line Interface (AWS CLI) version 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html). 

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](https://learn.microsoft.com/en-us/windows/wsl/install) afin d’obtenir une version intégrée avec Windows d’Ubuntu et Bash. Les exemples de commandes CLI de ce guide utilisent le formatage Linux. Les commandes qui incluent des documents JSON en ligne doivent être reformatées si vous utilisez la CLI Windows. 

1.  Utilisez la commande suivante pour créer la CloudFormation pile.

   ```
   aws cloudformation create-stack --stack-name request-validation-tutorial-cli --template-body file://request-validation-tutorial-cli.zip --capabilities CAPABILITY_NAMED_IAM 
   ```

1. 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 l'état de votre CloudFormation pile.

   ```
   aws cloudformation describe-stacks --stack-name request-validation-tutorial-cli
   ```

1. Lorsque le statut de votre CloudFormation pile est défini`StackStatus: "CREATE_COMPLETE"`, utilisez la commande suivante pour récupérer les valeurs de sortie pertinentes pour les étapes futures.

   ```
    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 validation dans laquelle les `POST` méthodes `GET` et sont exposées. Pour ce didacticiel, l’ID de ressource est `efg456`.

**Pour créer les validateurs de demandes et importer un modèle**

1. 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-only
   ```

   Notez l'ID du validateur `params-only`.

1.  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-only
   ```

   Notez l'ID du validateur `body-only`.

1.  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`**

1. Utilisez la commande suivante pour ajouter la méthode HTTP `GET` sur la ressource `/validate`. Cette commande crée la méthode `GET`, ajoute le validateur `params-only` et définit la chaîne de requête `petType` selon les besoins. 

   ```
   aws apigateway put-method --rest-api-id abc123 \
          --resource-id efg456 \
          --http-method GET \
          --authorization-type "NONE" \
          --request-validator-id aaa111 \
          --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éthode `POST`, ajoute le validateur `body-only` et attache le modèle au validateur de corps uniquement. 

   ```
   aws apigateway put-method --rest-api-id abc123 \
          --resource-id efg456 \
          --http-method POST \
          --authorization-type "NONE" \
          --request-validator-id bbb222 \
          --request-models 'application/json'=PetStoreModel
   ```

1.  Utilisez la commande suivante pour configurer la réponse `200 OK` de la méthode `GET /validate`. 

   ```
   aws apigateway put-method-response --rest-api-id abc123  \
               --resource-id efg456 \
               --http-method GET \
               --status-code 200
   ```

    Utilisez la commande suivante pour configurer la réponse `200 OK` de la méthode `POST /validate`.

   ```
   aws apigateway put-method-response --rest-api-id abc123  \
               --resource-id efg456 \
               --http-method POST \
               --status-code 200
   ```

1.  Utilisez la commande suivante pour configurer une `Integration` avec un point de terminaison HTTP spécifié pour la méthode `GET /validation`. 

   ```
   aws apigateway put-integration --rest-api-id abc123  \
               --resource-id efg456 \
               --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éthode `POST /validation`. 

   ```
   aws apigateway put-integration --rest-api-id abc123  \
                 --resource-id efg456 \
                 --http-method POST \
                 --type HTTP \
                 --integration-http-method GET \
                 --uri 'http://petstore-demo-endpoint.execute-api.com/petstore/pets'
   ```

1.  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-id efg456\
                 --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-id efg456 \
               --http-method POST \
               --status-code 200 \
               --selection-pattern ""
   ```

**Pour tester l’API**

1. 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-id efg456 \
               --http-method GET \
               --path-with-query-string '/validate?petType=dog'
   ```

   Le résultat sera `200 OK` et une liste de chiens.

1. 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-id efg456 \
               --http-method GET
   ```

   Le résultat sera une erreur `400`.

1. 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-id efg456 \
               --http-method POST \
               --body '{"id": 1, "name": "bella", "type": "dog", "price" : 400 }'
   ```

   Le résultat sera `200 OK` et un message de réussite. 

1. Utilisez la commande suivante pour tester en utilisant un corps non valide.

   ```
    aws apigateway test-invoke-method --rest-api-id abc123 \
                 --resource-id efg456 \
                 --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 CloudFormation pile**
+ Utilisez la commande suivante pour supprimer vos CloudFormation ressources.

  ```
  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
<a name="api-gateway-request-validation-setup-importing-swagger"></a>

 Vous pouvez déclarer un validateur de demande au niveau de l’API en spécifiant un ensemble d’objets [x-amazon-apigateway-request-Validators.RequestValidator objet](api-gateway-swagger-extensions-request-validators.requestValidator.md) dans le mappage d’[x-amazon-apigateway-requestobjet -validators](api-gateway-swagger-extensions-request-validators.md) 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ées `RequestBodyModel`, et les paramètres.

  Le modèle de données `RequestBodyModel` exige que l’objet JSON en entrée contienne les propriétés `name`, `type` et `price`. 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"]`) et `price` doit être compris entre 25 et 500. Le paramètre `id` 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é [x-amazon-apigateway-requestpropriété -validator](api-gateway-swagger-extensions-request-validator.md) 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](import-export-api-endpoints.md) ou l’[Importation d’une API optimisée pour la périphérie dans API Gateway](import-edge-optimized-api.md).

------
#### [ OpenAPI 3.0 ]

```
{
  "openapi" : "3.0.1",
  "info" : {
    "title" : "ReqValidators Sample",
    "version" : "1.0.0"
  },
  "servers" : [ {
    "url" : "/{basePath}",
    "variables" : {
      "basePath" : {
        "default" : "/v1"
      }
    }
  } ],
  "paths" : {
    "/validation" : {
      "get" : {
        "parameters" : [ {
          "name" : "q1",
          "in" : "query",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response",
            "headers" : {
              "test-method-response-header" : {
                "schema" : {
                  "type" : "string"
                }
              }
            },
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ArrayOfError"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-request-validator" : "params-only",
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "400",
              "responseParameters" : {
                "method.response.header.test-method-response-header" : "'static value'"
              },
              "responseTemplates" : {
                "application/xml" : "xml 400 response template",
                "application/json" : "json 400 response template"
              }
            },
            "2\\d{2}" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.querystring.type" : "method.request.querystring.q1"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      },
      "post" : {
        "parameters" : [ {
          "name" : "h1",
          "in" : "header",
          "required" : true,
          "schema" : {
            "type" : "string"
          }
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/RequestBodyModel"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "description" : "200 response",
            "headers" : {
              "test-method-response-header" : {
                "schema" : {
                  "type" : "string"
                }
              }
            },
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/ArrayOfError"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-request-validator" : "all",
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "POST",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "400",
              "responseParameters" : {
                "method.response.header.test-method-response-header" : "'static value'"
              },
              "responseTemplates" : {
                "application/xml" : "xml 400 response template",
                "application/json" : "json 400 response template"
              }
            },
            "2\\d{2}" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.header.custom_h1" : "method.request.header.h1"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      }
    }
  },
  "components" : {
    "schemas" : {
      "RequestBodyModel" : {
        "required" : [ "name", "price", "type" ],
        "type" : "object",
        "properties" : {
          "id" : {
            "type" : "integer"
          },
          "type" : {
            "type" : "string",
            "enum" : [ "dog", "cat", "fish" ]
          },
          "name" : {
            "type" : "string"
          },
          "price" : {
            "maximum" : 500.0,
            "minimum" : 25.0,
            "type" : "number"
          }
        }
      },
      "ArrayOfError" : {
        "type" : "array",
        "items" : {
          "$ref" : "#/components/schemas/Error"
        }
      },
      "Error" : {
        "type" : "object"
      }
    }
  },
  "x-amazon-apigateway-request-validators" : {
    "all" : {
      "validateRequestParameters" : true,
      "validateRequestBody" : true
    },
    "params-only" : {
      "validateRequestParameters" : true,
      "validateRequestBody" : false
    }
  }
}
```

------
#### [ OpenAPI 2.0 ]

```
{
  "swagger" : "2.0",
  "info" : {
    "version" : "1.0.0",
    "title" : "ReqValidators Sample"
  },
  "basePath" : "/v1",
  "schemes" : [ "https" ],
  "paths" : {
    "/validation" : {
      "get" : {
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "q1",
          "in" : "query",
          "required" : true,
          "type" : "string"
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response",
            "schema" : {
              "$ref" : "#/definitions/ArrayOfError"
            },
            "headers" : {
              "test-method-response-header" : {
                "type" : "string"
              }
            }
          }
        },
        "x-amazon-apigateway-request-validator" : "params-only",
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "GET",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "400",
              "responseParameters" : {
                "method.response.header.test-method-response-header" : "'static value'"
              },
              "responseTemplates" : {
                "application/xml" : "xml 400 response template",
                "application/json" : "json 400 response template"
              }
            },
            "2\\d{2}" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.querystring.type" : "method.request.querystring.q1"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      },
      "post" : {
        "consumes" : [ "application/json" ],
        "produces" : [ "application/json", "application/xml" ],
        "parameters" : [ {
          "name" : "h1",
          "in" : "header",
          "required" : true,
          "type" : "string"
        }, {
          "in" : "body",
          "name" : "RequestBodyModel",
          "required" : true,
          "schema" : {
            "$ref" : "#/definitions/RequestBodyModel"
          }
        } ],
        "responses" : {
          "200" : {
            "description" : "200 response",
            "schema" : {
              "$ref" : "#/definitions/ArrayOfError"
            },
            "headers" : {
              "test-method-response-header" : {
                "type" : "string"
              }
            }
          }
        },
        "x-amazon-apigateway-request-validator" : "all",
        "x-amazon-apigateway-integration" : {
          "httpMethod" : "POST",
          "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets",
          "responses" : {
            "default" : {
              "statusCode" : "400",
              "responseParameters" : {
                "method.response.header.test-method-response-header" : "'static value'"
              },
              "responseTemplates" : {
                "application/xml" : "xml 400 response template",
                "application/json" : "json 400 response template"
              }
            },
            "2\\d{2}" : {
              "statusCode" : "200"
            }
          },
          "requestParameters" : {
            "integration.request.header.custom_h1" : "method.request.header.h1"
          },
          "passthroughBehavior" : "when_no_match",
          "type" : "http"
        }
      }
    }
  },
  "definitions" : {
    "RequestBodyModel" : {
      "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
        }
      }
    },
    "ArrayOfError" : {
      "type" : "array",
      "items" : {
        "$ref" : "#/definitions/Error"
      }
    },
    "Error" : {
      "type" : "object"
    }
  },
  "x-amazon-apigateway-request-validators" : {
    "all" : {
      "validateRequestParameters" : true,
      "validateRequestBody" : true
    },
    "params-only" : {
      "validateRequestParameters" : true,
      "validateRequestBody" : false
    }
  }
}
```

------