Solicitud de la validación de las API de WebSocket en API Gateway
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
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
Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway
. Elija una API de WebSocket.
En el panel de navegación principal, elija Modelos.
Seleccione Crear modelo.
En Nombre, escriba
emailModel
.En Tipo de contenido, ingrese
application/json
.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.
Seleccione Guardar.
En este paso, se crea una ruta para la API de WebSocket.
Para crear una ruta
En el panel de navegación principal, elija Rutas.
Elija Create route (Crear ruta).
Para Route key (Clave de ruta), ingrese
sendMessage
.Elija un tipo de integración y especifique un punto de conexión de integración. Para obtener más información, consulte Integraciones de API de WebSocket en API Gateway.
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
En la pestaña Solicitud de ruta, en Configuración de solicitud de ruta, elija Editar.
Para Expresión de selección de modelo, ingrese
${request.body.messageType}
.API Gateway usa la propiedad
messageType
para validar la solicitud entrante.Elija Agregar modelo de solicitud.
Para Clave de modelo, ingrese
email
.Para Modelo, elija emailModel.
API Gateway valida los mensajes entrantes con la propiedad
messageType
establecida enemail
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
.Elija Guardar cambios.
En este paso, debe implementar y probar la API.
Implementación y prueba de la API
Elija Deploy API (Implementar API).
Elija la etapa que desee en el menú desplegable o escriba el nombre de una etapa nueva.
Elija Implementar.
En el panel de navegación principal, elija Etapas.
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/productionAbra un nuevo terminal y ejecute el comando wscat con los siguientes parámetros.
wscat -c wss://
abcdef123
.execute-api.us-west-2
.amazonaws.com/productionConnected (press CTRL+C to quit)
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"}