fbpx
Get In Touch
1201 3rd Avenue Seattle, WA 98101, US
(HQ) Av. Punto Sur 31, Tlajomulco de Zúñiga, Jal 45050, MX
Carrera 11B # 99 - 25, Btá, 110221, CO
Let's talk
hello@inmediatum.com
Ph: +1 (650) 603 0883
Sales attention M - F 9am - 5pm (CT)
Get support
Careers
Endless inspiration and meaningful work
See open positions
Back

Validación de datos con JSON Schema

Para poder inciar con la validación de datos con JSON Schema partamos con recordar que JSON es el formato de texto para el intercambio de datos posiblemente más usado en la actualidad, cada vez es más común construir servicios o consumir servicios que usen este formato, y por lo mismo es necesario tener un mecanismo para validar que estos datos tienen la estructura que esperamos.

Al generar una API RESTful se tienen que validar datos en cada uno de los métodos que reciben datos y por cada método a veces se generan varios esquemas, lo que puede llegar a volverse complejo y difícil de mantener.

Es por eso que a continuación les explico como se puede generar una librería que lea y consuma todos los esquemas que estén en un directorio específico y luego se puedan hacer validaciones de una forma más sencilla.

Para este ejemplo usaremos Node.js, y la librería AJV (Another JSON Schema Validator) que es una de las más rápidas y que se mantiene más actualizada. El cómo generar los esquemas queda fuera del alcance de este artículo.

Librería para validación de datos.

Importamos los módulos necesarios:

const Ajv = require(‘ajv’);
const path = require(‘path’);
const fs = require(‘fs’);

Especificamos en qué directorio se encuentran los esquemas para validación y preparamos la configuración de AJV.

const SCHEMAS_DIR = path.join(__dirname, ‘..’, ‘schemas’);

const ajv = new Ajv({
verbose : true,
schemaId: ‘auto’,
allErrors: true
});

En las opciones, verbose ayuda a que los errores sean más específicos, schemaId permite usar esquemas en formato draft-04 así como draft-06/07 de forma automática y allErrors sigue validando después de encontrar un error para regresar todos los errores posibles.

Inicializamos Ajv, leemos y agregamos al caché todos los esquemas que se encuentran en el directorio especificado.

(() => {
fs.readdir(SCHEMAS_DIR, function (err, files) {
if (err)
throw new Error(‘validator error: cannot read schemas directory’);
files.forEach(function(fileName) {
if(!fileName.match(new RegExp(/([a-zA-Z0-9\s_\\.])+json/, ‘ig’)))
return;
let json = require(path.join(SCHEMAS_DIR, fileName))
ajv.addSchema(json)
});
});
})()

Y por último exportamos un método para la validación que regrese una promesa:

exports.validate = function(schema, jsonData){
let filePath = path.join(SCHEMAS_DIR, schema + ‘.json’)
return new Promise((resolve, reject) => {
if(!fs.existsSync(filePath))
return reject(new Error(‘validator error: schema does not exists’))
let validate = ajv.getSchema(‘/’ + schema);
let valid = validate(jsonData);
if(!valid)
return reject(ajv.errorsText(validate.errors))
resolve(valid);
})
}

Integración con nuestro código

Con esto tenemos listo nuestro módulo para validar esquemas que podemos usar en toda la aplicación, solo falta meter los esquemas necesarios en el directorio que fue especificado. Suponiendo que queremos validar un login y que agregamos un esquema json con nombre login.json:

const validator = require(‘./validator’);

validator.validate(‘login’, loginData)
.then((valid) => {
// loginData es válido de acuerdo al jsonschema login.json

})
.catch((errors)) => {
// hay errores de validación
console.error(errors);
})

Una vez generada nuestra librería solo falta agregar tantos esquemas como sean necesarios y usar el método de validación como vimos anteriormente.

Espero como siempre que el ejemplo les sea útil para entender la validación de datos con JSON Schema y si queda alguna duda quedo atento a sus comentarios, también los invito a leer otros de nuestros posts de ingeniería, saludos.

Este artículo puede interesarle Análisis de sentimientos a un texto con NodeJS

Carla Serrato
Carla Serrato
Especialista en ciencias sociales y de comportamiento. Carla no solo asesora a nuestro departamento de UX en INMEDIATUM sino que su investigación permite optimizar nuestros algoritmos de inteligencia artificial como para la prevención de riesgo crediticio, genera mejor adherencia a tratamientos médicos, reconocimiento facial para identificar rasgos de la personalidad entre otros.

We use cookies to give you the best experience. Cookie Policy