📐

JSON Schema

JSON Schema es una especificación formal que describe la estructura esperada de un objeto JSON: qué propiedades existen, qué tipos de dato contienen, cuáles son obligatorias y qué restricciones deben cumplir. Se usa masivamente para validar peticiones y respuestas en APIs REST, generar documentación automática y asegurar contratos entre frontend y backend.

Ejemplos

  • { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "required": ["email"], "properties": { "email": { "type": "string", "format": "email" } } }
  • { "type": "array", "items": { "type": "number" }, "minItems": 1, "uniqueItems": true }
  • { "type": "string", "pattern": "^[A-Z]{3}-\\d{4}$", "description": "Código de producto" }
  • { "oneOf": [{ "type": "string" }, { "type": "number" }] }
  • { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", "minLength": 1 } } }

Preguntas frecuentes

¿Cuál es la diferencia entre draft-07 y draft 2020-12?

Draft 2020-12 reemplaza 'definitions' por '$defs', introduce '$dynamicRef' para recursión dinámica, y mejora el vocabulario de anotaciones ('deprecated', 'readOnly'). La mayoría de librerías aún usan draft-07; migrá solo si necesitás features nuevas y tu validador lo soporta.

¿JSON Schema valida datos o solo estructura?

Valida ambos: estructura (tipos, propiedades requeridas) y datos (rangos, patrones, enums). Pero no lógica de negocio compleja (ej: 'este email debe existir en la DB'). Para eso usás validadores custom después de pasar el schema.

¿Cómo manejo schemas grandes sin duplicación?

Usá '$ref' para referenciar definiciones comunes dentro del mismo schema ('$defs') o en archivos externos. Herramientas como '$RefParser' resuelven referencias y producen un schema completo. También podés usar 'allOf' para componer schemas pequeños en uno grande.