Validación de solicitudes - Amazon API Gateway

Validación de solicitudes

Puede configurar API Gateway para que realice la validación en una solicitud de ruta antes de continuar con la solicitud de integración. Si la validación falla, API Gateway falla la solicitud sin llamar a su back-end, envía una respuesta de puerta de enlace "Cuerpo de solicitud incorrecto" al cliente y publica los resultados de validación en CloudWatch Logs. El uso de la validación de esta manera reduce las llamadas innecesarias a su back-end de API.

Expresiones de selección de modelo

Puede utilizar una expresión de selección de modelo para validar dinámicamente solicitudes dentro de la misma ruta. La validación del modelo se produce si proporciona una expresión de selección de modelo para integraciones proxy o no proxy. Es posible que necesite definir el modelo de $default como una alternativa cuando no se encuentre ningún modelo coincidente. Si no hay ningún modelo coincidente y $default no está definido, la validación falla. La expresión de selección tiene el aspecto Route.ModelSelectionExpression y se evalúa como la clave para Route.RequestModels.

Al definir una ruta para una API de WebSocket, puede especificar si lo desea una expresión de selección de modelo. Esta expresión se evalúa para seleccionar el modelo que se utilizará para la validación del cuerpo cuando se reciba una solicitud. La expresión se evalúa en una de las entradas de la propiedad de una ruta requestmodels.

Un modelo se expresa como un esquema JSON y describe la estructura de datos del cuerpo de la solicitud. La naturaleza de estas expresiones de selección le permite elegir de forma dinámica el modelo con el que debe realizarse la validación en tiempo de ejecución para una ruta determinada. Para obtener información sobre cómo crear un modelo, consulte Comprensión de los modelos de datos.

Configuración de la validación de solicitudes mediante la consola de API Gateway

En el siguiente ejemplo se muestra cómo configurar la validación de la solicitud en una ruta.

En primer lugar, debe crear un modelo y, a continuación, crear una ruta. A continuación, debe configurar la validación de la solicitud en la ruta que acaba de crear. Por último, debe implementar y probar la API. Para completar este tutorial, necesita una API de WebSocket con $request.body.action como expresión de selección de rutas y un punto de conexión de integración para la nueva ruta.

También es necesario wscat para conectarse a la API. Para obtener más información, consulte Utilice wscat para conectarse y enviar mensajes a una API de WebSocket.

Para crear un modelo
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Elija una API de WebSocket.

  3. En el panel de navegación principal, elija Modelos.

  4. Seleccione Crear modelo.

  5. En Nombre, escriba emailModel.

  6. En Tipo de contenido, ingrese application/json.

  7. En Esquema del modelo, escriba el siguiente modelo:

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

    Este modelo requiere que la solicitud contenga una dirección de correo electrónico.

  8. Seleccione Guardar.

En este paso, se crea una ruta para la API de WebSocket.

Para crear una ruta
  1. En el panel de navegación principal, elija Rutas.

  2. Elija Create route (Crear ruta).

  3. Para Route key (Clave de ruta), ingrese sendMessage.

  4. Elija un tipo de integración y especifique un punto de conexión de integración. Para obtener más información, consulte Configuración de integraciones de API de WebSocket.

  5. Elija Create route (Crear ruta).

En este paso, debe configurar la validación de solicitudes para la ruta sendMessage.

Configuración de la validación de solicitudes
  1. En la pestaña Solicitud de ruta, en Configuración de solicitud de ruta, elija Editar.

  2. Para Expresión de selección de modelo, ingrese ${request.body.messageType}.

    API Gateway usa la propiedad messageType para validar la solicitud entrante.

  3. Elija Agregar modelo de solicitud.

  4. Para Clave de modelo, ingrese email.

  5. Para Modelo, elija emailModel.

    API Gateway valida los mensajes entrantes con la propiedad messageType establecida en email frente a este modelo.

    nota

    Si API Gateway no puede hacer coincidir la expresión de selección del modelo con una clave de modelo, selecciona el modelo $default. Si no hay ningún modelo $default, la validación produce un error. Para las API de producción, se recomienda crear un modelo $default.

  6. Elija Guardar cambios.

En este paso, debe implementar y probar la API.

Implementación y prueba de la API
  1. Elija Deploy API (Implementar API).

  2. Elija la etapa que desee en el menú desplegable o escriba el nombre de una etapa nueva.

  3. Elija Implementar.

  4. En el panel de navegación principal, elija Etapas.

  5. Copie la URL de WebSocket de la API. La dirección URL debe tener un aspecto similar al siguiente: wss://abcdef123.execute-api.us-east-2.amazonaws.com/production.

  6. Abra un nuevo terminal y ejecute el comando wscat con los siguientes parámetros.

    wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
    Connected (press CTRL+C to quit)
  7. Use el siguiente comando para probar la API.

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

    API Gateway producirá un error en la solicitud.

    Use el siguiente comando para enviar una solicitud válida a la API.

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