Validación de Lógica de Negocio con API Gateway y JSON Schema
Resumen
¿Cómo se integra API Gateway para validación de lógica de negocio en aplicaciones serverless?
API Gateway es una poderosa herramienta en el desarrollo de aplicaciones serverless. No solo facilita la comunicación entre servicios, sino también permite validar la lógica de negocio directamente en su interfaz, haciendo que las aplicaciones sean más eficientes.
¿Qué es API Gateway y cómo funciona?
API Gateway es un servicio de AWS que permite crear, publicar, mantener, monitorizar, y proteger API a cualquier escala. En el contexto de integrarlo para validaciones, su función principal es verificar ciertas condiciones antes de que una solicitud llegue a las funciones Lambda. Esto es crucial porque evita que las lambdas tengan que analizar cada petición, lo cual ahorra tiempo y reduce la carga sobre esos recursos.
¿Cómo configuro la validación en API Gateway?
La validación de lógica de negocio en API Gateway se realiza a través de JSON Schema, un lenguaje declarativo que define la estructura de los documentos JSON. Configurar estas validaciones implica una serie de pasos:
Definir el JSON Schema: Este proceso consiste en establecer un documento que describa las propiedades necesarias de los datos. Aquí un ejemplo de JSON Schema para un usuario:
Incorporar el schema en las lambdas: Usar una función de Serverless Framework para leer el schema desde el archivo. Aquí, es crucial asegurarse de definir correctamente el tipo de contenido y la estructura JSON válida.
Deploy y prueba: A través del comando SLS deploy, la aplicación se inicia y se prueba usando herramientas como Postman para confirmar la validación.
¿Cuáles son los beneficios de validar lógica de negocio en el API Gateway?
Reducción de carga en lambdas: Al validar las peticiones en la capa anterior, se evita cargar las funciones lambdas y, por lo tanto, se optimizan los recursos del sistema.
Consistencia en validaciones: Al gestionar las validadciones en un lugar central, se asegura que todas las peticiones cumplan con los requisitos de la aplicación.
Mejor respuesta y eficiencia: Al reducir los tiempos de call start y validación individual en cada lambda, las aplicaciones ofrecen respuestas más rápidas al usuario final.
¿Cómo implementar un JSON Schema para validaciones complejas?
El uso de JSON Schema se extiende más allá de validaciones simples. Permite implementar validaciones complejas, como patrones para correos electrónicos o números de teléfono usando expresiones regulares. En aplicaciones que manejan datos sensibles o específicos, este tipo de validaciones previas son fundamentales.
Ejemplo de implementación avanzada
Si necesitas validar un correo electrónico, se puede ajustar el esquema para incluir una expresión regular que verifique el formato:
Esto asegura que los datos introducidos cumplan con el formato estándar de un email, ayudando a prevenir errores comunes y asegurar la integridad de los datos.
Consejos para integrar validaciones
Mantén la estructura organizada: Es recomendable tener un archivo específico para esquemas, lo que facilita su gestión y actualización.
Testea exhaustivamente: Utiliza herramientas como Postman para simular diferentes escenarios y confirmar que todas las validaciones funcionan como se espera.
Aprovecha modelos y plantillas existentes: Revisa la documentación de AWS y JSON Schema para usar modelos que te devuelvan a validar tu lógica con eficiencia.
En resumen, API Gateway no solo es una herramienta para conectar servicios, sino también un actor principal para implementar lógicas de negocio complejas en aplicaciones serverless. Al manejar las validaciones desde este nivel, se optimizan recursos y se mejora el rendimiento de la aplicación, asegurando una experiencia más fluida y eficiente para el usuario final.
Me parece excelente ésta manera de validar datos. Ya no es una tarea a la que le debemos asignar computo en una función sino que se puede hacer desde nuestro API Gateway.
:mag: :mag: :mag:
Para validar un email no use regex si no que use format al colocar un tipo string
Después del punto le podrías poner S{2,4}, ya que no hay dominios con más de esos caracteres
Veo la pregunta de Gabriel Guillermo Gonzalez Cifuentes pero no me queda claro, para agregar mensajes personalizados tendria que hacer algo en el serverless.ym o como seria?
Hola Luis, gracias por preguntar, en la especificacion del API podemos definir los valores maximos y minimos en el campo de RequestBodyModel.properties, con base en estos valores el Api Gateway genera un mensaje diciendo si el valor que ingresamos es valido o no.
Si quisieramos agregar mensajes personalizados, se puede hacer en la seccion de responseTemplates. Dejanos saber que tal te fue y si la respuesta te fue de ayuda :muscle:
¿Cómo podría responder un mensaje indicando cual es el error?, por ejemplo responder el 400 pero decir, tu edad no puede ser menor a 18.
Hola Gabriel, puedes especificar un esquema de OpenAPI, ahi puedes poner multiples campos y sus condiciones.
Documentacion de AWS
Siiipi! Ahora si funciona bien .
{"$schema":"http://json-schema.org/draft-04/schema#","title":"User","type":"object","required":["name","email","age"],"properties":{"name":{"type":"string","description":"The person's first name.","default":""},"age":{"description":"Age in years which must be equal to or greater than zero.","type":"integer","minimum":18,"default":""},"email":{"type":"string","default":"user007@gmail.com","pattern":"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$","format":"email"},"city":{"type":"string","default":"NYC"}}}
la peticion PSOT de createUser fue exitoso.
Ya se muestra en DynamoDB y en Logs de CloudWatch
Buenas noches, Que software usaron para el esquema?
Hola, usamos Excalidraw! :D
se corta y no avanza normalmente el video
Hola Raul, hemos revisado y se ve el video con normalidad :eyes
✅
Cómo validar que el request viene en formato json? y pase por la validación?. Si es de tipo texto no pasa por la validación.
Si por alguna razón no te funciona la validacion del schema
verifica que esté en formato JSON, (estaba enviando mis peticiones en text y por alguna razon pasaba por APIGATEWAY y persistía la información)
Me parece que es porque especificamos que la validación se iba a hacer con application/json. Con plain text no valida la información
Para hacer referencia a propiedades en otros archivos JSON, utiliza la sintaxis ${file(./miArchivo.json):algunaPropiedad}. Es importante que el archivo al que haces referencia tenga la extensión correcta para su tipo de archivo (.yml para YAML o .json para JSON) para que sea interpretado correctamente.
Excelente clase.
Yo utilice el siguiente patter en el archivo de user-schema.json:
Con esto pude hacer la validacion del correo al hacer una creacion del mismo tal como me aparece en postman.