Configuración de la validación básica de solicitudes en API Gateway
En esta sección se muestra cómo configurar la validación de solicitudes para API Gateway mediante la consola, la AWS CLI y una definición de OpenAPI.
Temas
Configuración de la validación de solicitudes mediante la consola de API Gateway
Para utilizar la consola de API Gateway para validar una solicitud, seleccione uno de los tres validadores para una solicitud de API:
-
Validar el cuerpo.
-
Validar los parámetros de la cadena de consulta y los encabezados.
-
Validar el cuerpo, los parámetros de la cadena de consulta y los encabezados.
Al aplicar uno de los validadores en un método de la API, la consola de API Gateway lo agrega al mapa RequestValidators de la API.
Para seguir este tutorial, utilizará una plantilla AWS CloudFormation para crear una API de API Gateway incompleta. Esta API incompleta tiene un recurso /validator
con los métodos GET
y POST
. Ambos métodos están integrados con el punto de conexión HTTP http://petstore-demo-endpoint.execute-api.com/petstore/pets
. Configurará dos tipos de validación de solicitudes:
-
En el método
GET
, configurará la validación de solicitudes para los parámetros de la cadena de consulta URL. -
En el método
POST
, configurará la validación de solicitudes para el cuerpo de la solicitud.
Esto permitirá que solo ciertas llamadas a la API pasen a la API.
Descargue y descomprima la plantilla de creación de aplicaciones para AWS CloudFormation. Usará esta plantilla para crear una API incompleta. Finalizará el resto de los pasos en la consola de API Gateway.
Para crear una pila de AWS CloudFormation
Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation
. -
Seleccione Create stack (Crear pila) y, a continuación, seleccione With new resources (standard) (Con nuevos recursos [estándar]).
-
En Specify template (Especificar plantilla), elija Upload a template file (Cargar un archivo de plantilla).
-
Seleccione la plantilla que ha descargado.
-
Elija Next (Siguiente).
-
En Stack name (Nombre de pila), escriba
request-validation-tutorial-console
y, a continuación, elija Next (Siguiente). -
En Configure stack options (Configurar opciones de pila), elija Next (Siguiente).
-
Para Capabilities (Capacidades), sepa que AWS CloudFormation puede crear recursos de IAM en su cuenta.
-
Seleccione Submit (Enviar).
AWS CloudFormation aprovisiona los recursos especificados en la plantilla. Puede tardar varios minutos en finalizar el aprovisionamiento de los recursos. Cuando el estado de la pila de AWS CloudFormation sea CREATE_COMPLETE, estará listo para continuar con el paso siguiente.
Para seleccionar la API recién creada
Seleccione la pila
request-validation-tutorial-console
recién creada.Seleccione Recursos.
En ID físico, seleccione la API. Este enlace lo dirigirá a la consola de API Gateway.
Antes de modificar los métodos GET
y POST
, debe crear un modelo.
Para crear un modelo
-
Se requiere un modelo para usar la validación de solicitudes en el cuerpo de una solicitud entrante. Para crear un modelo, en el panel de navegación principal, elija Modelos.
-
Seleccione Crear modelo.
-
En Nombre, escriba
PetStoreModel
. -
En Tipo de contenido, indique
application/json
. Si no se encuentra ningún tipo de contenido coincidente, no se realiza la validación de la solicitud. Para utilizar el mismo modelo independientemente del tipo de contenido, introduzca$default
. -
En Descripción, indique
My PetStore Model
como descripción del modelo. -
En Esquema del modelo, pegue el siguiente modelo en el editor de código y seleccione Crear.
{ "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 } } }
Para obtener más información acerca del modelo, consulte Modelos de datos para las API de REST.
Para configurar la validación de solicitudes para un método GET
-
En el panel de navegación principal, seleccione Recursos y, a continuación, seleccione el método GET.
-
En la pestaña Solicitud de método, en Configuración de solicitud de método, elija Editar.
-
En Validador de solicitud, seleccione Validar parámetros de cadena de consulta y encabezados.
En Parámetros de cadenas de consulta de URL, haga lo siguiente:
Elija Add query string (Añadir cadena de consulta).
En Nombre, escriba
petType
.Active la opción Obligatorio.
Mantenga Almacenamiento en caché desactivado.
-
Seleccione Guardar.
-
En la pestaña Solicitud de integración, en Configuración de la solicitud de integración, seleccione Editar.
En Parámetros de cadenas de consulta de URL, haga lo siguiente:
Elija Add query string (Añadir cadena de consulta).
En Nombre, escriba
petType
.En Mapeado de, introduzca
method.request.querystring.petType
. Esto mapea elpetType
con el tipo de mascota.Para obtener más información sobre el mapeo de datos, consulte el tutorial de mapeo de datos.
Mantenga Almacenamiento en caché desactivado.
Seleccione Guardar.
Para probar la validación de solicitudes para el método GET
-
Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para mostrar la pestaña.
-
En Cadenas de consulta, introduzca
petType=dog
y seleccione Prueba. -
La prueba del método dará como resultado
200 OK
y mostrará una lista de perros.Para obtener información sobre cómo transformar estos datos de salida, consulte el tutorial de mapeo de datos.
-
Elimine
petType=dog
y seleccione Pruebas. -
La prueba del método devolverá un error
400
con el siguiente mensaje de error:{ "message": "Missing required request parameters: [petType]" }
Para configurar la validación de solicitudes para el método POST
-
En el panel de navegación principal, seleccione Recursos y, a continuación, seleccione el método POST.
-
En la pestaña Solicitud de método, en Configuración de solicitud de método, elija Editar.
-
En Validador de solicitudes, seleccione Validar cuerpo.
-
En Cuerpo de la solicitud, seleccione Agregar modelo.
-
En Tipo de contenido, introduzca
application/json
y, a continuación, en Modelo, seleccione PetStoreModel. Seleccione Guardar.
Para probar la validación de solicitudes para un método POST
-
Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para mostrar la pestaña.
-
En Cuerpo de la solicitud, pegue lo siguiente en el editor de código:
{ "id": 2, "name": "Bella", "type": "dog", "price": 400 }
Seleccione Probar.
-
La prueba del método devolverá
200 OK
y un mensaje de éxito. -
En Cuerpo de la solicitud, pegue lo siguiente en el editor de código:
{ "id": 2, "name": "Bella", "type": "dog", "price": 4000 }
Seleccione Probar.
-
La prueba del método devolverá un error
400
con el siguiente mensaje de error:{ "message": "Invalid request body" }
En la parte inferior de los registros de pruebas, se mostrará el motivo por el que el cuerpo de la solicitud no es válido. En este caso, el precio de la mascota estaba fuera del máximo especificado en el modelo.
Para eliminar una pila de AWS CloudFormation
Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation
. -
Seleccione su pila de AWS CloudFormation.
-
Elija Delete (Eliminar) y, a continuación, confirme su elección.
Siguientes pasos
Para obtener información sobre cómo transformar estos datos de salida y realizar más mapeos de datos, consulte el tutorial de mapeo de datos.
Siga el tutorial Configuración de la validación básica de solicitudes mediante la AWS CLI para realizar pasos similares con la AWS CLI.
Configuración de la validación básica de solicitudes mediante la AWS CLI
Puede crear un validador para configurar la validación de solicitudes mediante la AWS CLI Para seguir este tutorial, utilizará una plantilla AWS CloudFormation para crear una API de API Gateway incompleta.
nota
Esta no es la misma plantilla de AWS CloudFormation que la del tutorial de la consola.
Con un recurso /validator
preexpuesto, creará los métodos GET
y POST
. Ambos métodos están integrados con el punto de conexión HTTP http://petstore-demo-endpoint.execute-api.com/petstore/pets
. Configurará las dos validaciones de solicitudes siguientes:
-
En el método
GET
, creará un validadorparams-only
para validar los parámetros de la cadena de consulta de URL. -
En el método
POST
, creará un validadorbody-only
para validar el cuerpo de la solicitud.
Esto permitirá que solo ciertas llamadas a la API pasen a la API.
Para crear una pila de AWS CloudFormation
Descargue y descomprima la plantilla de creación de aplicaciones para AWS CloudFormation.
Para completar el siguiente tutorial, necesita la versión 2 de la AWS Command Line Interface (AWS CLI).
Para comandos largos, se utiliza un carácter de escape (\
) para dividir un comando en varias líneas.
nota
En Windows, algunos comandos de la CLI de Bash que utiliza habitualmente (por ejemplo, zip
) no son compatibles con los terminales integrados del sistema operativo. Para obtener una versión de Ubuntu y Bash integrada con Windows, instale el subsistema de Windows para Linux
Utilice el siguiente comando para crear la pila 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 aprovisiona los recursos especificados en la plantilla. Puede tardar varios minutos en finalizar el aprovisionamiento de los recursos. Use el siguiente comando para ver el estado de su pila AWS CloudFormation.
aws cloudformation describe-stacks --stack-name request-validation-tutorial-cli
-
Cuando el estado de su pila AWS CloudFormation sea
StackStatus: "CREATE_COMPLETE"
, utilice el siguiente comando para recuperar los valores de salida relevantes para los pasos futuros.aws cloudformation describe-stacks --stack-name request-validation-tutorial-cli --query "Stacks[*].Outputs[*].{OutputKey: OutputKey, OutputValue: OutputValue, Description: Description}"
A continuación se muestran los valores de salida:
ApiID, que es el identificador de la API. Para este tutorial, el ID de la API es
abc123
.ResourceId, que es el identificador del recurso del validador donde están expuestos los métodos
GET
yPOST
. Para este tutorial, el ID del recurso esefg456
.
Para crear los validadores de solicitudes e importar un modelo
-
Se requiere un validador para utilizar la validación de solicitudes con la AWS CLI. Utilice el siguiente comando para crear un validador que valide únicamente los parámetros de la solicitud.
aws apigateway create-request-validator --rest-api-id
abc123
\ --no-validate-request-body \ --validate-request-parameters \ --name params-onlyAnote el ID del validador
params-only
. -
Utilice el siguiente comando para crear un validador que valide únicamente el cuerpo de la solicitud.
aws apigateway create-request-validator --rest-api-id
abc123
\ --validate-request-body \ --no-validate-request-parameters \ --name body-onlyAnote el ID del validador
body-only
. -
Se requiere un modelo para usar la validación de solicitudes en el cuerpo de una solicitud entrante. Utilice el siguiente comando para importar un modelo.
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 no se encuentra ningún tipo de contenido coincidente, no se realiza la validación de la solicitud. Para utilizar el mismo modelo independientemente del tipo de contenido, especifique
$default
como la clave.
Para crear los métodos GET
y POST
-
Use el siguiente comando para añadir el método HTTP
GET
en el recurso/validate
. Este comando crea el métodoGET
, agrega el validadorparams-only
y establece la cadena de consultapetType
según sea necesario.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"Use el siguiente comando para añadir el método HTTP
POST
en el recurso/validate
. Este comando crea el métodoPOST
, agrega el validadorbody-only
y adjunta el modelo al validador exclusivo para el cuerpo.aws apigateway put-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --authorization-type "NONE" \ --request-validator-idbbb222
\ --request-models 'application/json'=PetStoreModel -
Use el siguiente comando para configurar la respuesta
200 OK
del métodoGET /validate
.aws apigateway put-method-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --status-code 200Use el siguiente comando para configurar la respuesta
200 OK
del métodoPOST /validate
.aws apigateway put-method-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --status-code 200 -
Use el siguiente comando para configurar una
Integration
con un punto de conexión HTTP especificado para el métodoGET /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'Use el siguiente comando para configurar una
Integration
con un punto de conexión HTTP especificado para el métodoPOST /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' -
Use el siguiente comando para configurar la respuesta de integración para el método
GET /validation
.aws apigateway put-integration-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --status-code 200 \ --selection-pattern ""Use el siguiente comando para configurar la respuesta de integración para el método
POST /validation
.aws apigateway put-integration-response --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --status-code 200 \ --selection-pattern ""
Para probar el API
-
Para probar el método
GET
, que realizará la validación de la solicitud para las cadenas de consulta, utilice el siguiente comando:aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GET \ --path-with-query-string '/validate?petType=dog'El resultado devolverá
200 OK
y una lista de perros. -
Use el siguiente comando para probar sin incluir la cadena de consulta
petType
.aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method GETEl resultado devolverá un error
400
. -
Para probar el método
POST
, que realizará la validación de la solicitud para el cuerpo de la solicitud, utilice el siguiente comando:aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --body '{"id": 1, "name": "bella", "type": "dog", "price" : 400 }'El resultado devolverá
200 OK
y un mensaje de éxito. -
Use el siguiente comando para probar el uso de un cuerpo no válido.
aws apigateway test-invoke-method --rest-api-id
abc123
\ --resource-idefg456
\ --http-method POST \ --body '{"id": 1, "name": "bella", "type": "dog", "price" : 1000 }'El resultado devolverá un error
400
, ya que el precio del perro supera el precio máximo definido por el modelo.
Para eliminar una pila de AWS CloudFormation
Use el siguiente comando para eliminar los recursos AWS CloudFormation.
aws cloudformation delete-stack --stack-name request-validation-tutorial-cli
Configuración de la validación básica de solicitudes con una definición de OpenAPI
Puede declarar un validador de solicitudes en el nivel de la API especificando un conjunto de objetos Objeto x-amazon-apigateway-request-validators.requestValidator en el mapa Objeto x-amazon-apigateway-request-validators para seleccionar qué parte de la solicitud se validará. En la definición de OpenAPI de ejemplo hay dos validadores:
El validador
all
, que valida tanto el cuerpo, utilizando el modelo de datosRequestBodyModel
, como los parámetros.El modelo de datos
RequestBodyModel
exige que el objeto JSON de entrada contenga las propiedadesname
,type
yprice
. La propiedadname
puede ser cualquier cadena,type
debe ser uno de los campos de la enumeración especificada (["dog", "cat", "fish"]
) yprice
debe estar comprendido entre 25 y 500. El parámetroid
no es obligatorio.param-only
, que valida solo los parámetros.
Para habilitar un validador de solicitudes en todos los métodos de una API, especifique una propiedad Propiedad x-amazon-apigateway-request-validator en el nivel de la API de la definición de OpenAPI. En el ejemplo de definición de OpenAPI, el validador all
se usa en todos los métodos de la API, a menos que se invalide de otro modo. Cuando se utiliza un modelo para validar el cuerpo, si no se encuentra ningún tipo de contenido coincidente, no se realiza la validación de la solicitud. Para utilizar el mismo modelo independientemente del tipo de contenido, especifique $default
como la clave.
Para habilitar un validador de solicitudes para un método individual, especifique la propiedad x-amazon-apigateway-request-validator
en el nivel de método. En el ejemplo de definición de OpenAPI, el validador param-only
anula el validador all
del método GET
.
Para importar el ejemplo de OpenAPI a API Gateway, consulte las siguientes instrucciones para Importación de una API regional en API Gateway o para Importación de una API optimizada para bordes en API Gateway.