Al intercambiar datos entre aplicaciones, servicios web o API, incluso el más mínimo error estructural puede provocar un fallo general. Por eso, la validación de datos JSON es un paso esencial en muchos escenarios, como la integración de API, la importación y exportación de datos, la configuración de aplicaciones y la comunicación entre microservicios. 4D 21 R3 no es solo una actualización del borrador 2020-12, sino una adaptación completa a los estándares modernos de la web y las API. Las validaciones JSON son ahora más potentes, más expresivas y totalmente compatibles con las herramientas actuales.
¿Qué es un esquema?
Un esquema JSON te permite describir con precisión la estructura esperada de un documento: tipos de datos, campos obligatorios, valores permitidos y formatos (correo electrónico, URL, etc.).
Gracias a este esquema, puede garantizar la calidad y la fiabilidad de sus intercambios de datos sin tener que escribir manualmente código de verificación. Si el JSON recibido no cumple con las reglas definidas, 4D le indica exactamente dónde y por qué falla la validación.
Esto ahorra mucho tiempo, aumenta la seguridad de sus aplicaciones y proporciona una base sólida para diseñar interfaces robustas o servicios web fiables.
4D ofrece el comando `JSON Validate ` para comparar un objeto JSON con un esquema que cumpla con el estándar JSON Schema. Con 4D 21 R3, este comando da un gran salto; ahora es compatible con las versiones más recientes del estándar (Borrador 2020-12), ofreciendo mayor flexibilidad, nuevas palabras clave (const, if/then/else, unevaluatedProperties, …), validación de fechas nativa de 4D y mejor interoperabilidad con herramientas modernas.
Ejemplo: uso de reglas condicionales
El nuevo estándar JSON Schema introduce potentes reglas condicionales, lo que le permite codificar parte de su lógica de negocio directamente en el esquema, algo que resultaba engorroso o imposible con el Draft-04.
Tomemos un ejemplo clásico: validar un pago en función del método seleccionado. Dependiendo del método de pago:
- si se trata de una tarjeta de crédito, se deben proporcionar «cardNumber» y «expiryDate»,
- si se trata de una transferencia bancaria, se requieren «iban» y «bic»,
- en caso contrario (por ejemplo, pagos en efectivo), ninguno de estos campos es obligatorio.
Con el Draft-04, había que implementar todas estas comprobaciones manualmente en el código 4D. El esquema solo podía definir tipos, restricciones básicas y campos obligatorios, pero no podía expresar lógica condicional como «si paymentMethod = credit_card, entonces se requieren cardNumber y expiryDate».
El Draft-2020-12 lo cambia todo. Ahora puedes definir estas reglas condicionales directamente en el esquema JSON. He aquí un ejemplo práctico:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Esquema de pedido",
"type": "object",
"properties": {
"orderId": { "type": "integer" },
"customer": { "type": "string" },
"amount": { "type": "number", "minimum": 0 },
"paymentMethod": {
"type": "cadena",
"enum": ["tarjeta_de_crédito", "transferencia_bancaria", "efectivo"]
},
"número_de_tarjeta": { "type": "cadena", "patrón": "^[0-9]{16}$" },
"fecha_caducidad": { "tipo": "cadena", "patrón": "^(0[1-9]|1[0-2])/[0-9]{2}$" },
"iban": { "tipo": "cadena" },
"bic": { "type": "string" }
},
"required": ["orderId", "customer", "amount", "paymentMethod"],
"if": { "properties": { "paymentMethod": { "const": "credit_card" } } },
"then": { "required": ["cardNumber", "expiryDate"] },
"else": {
"if": { "properties": { "paymentMethod": { "const": "bank_transfer" } } },
"then": { "required": ["iban", "bic"] }
}
}
Este esquema combina:
- expresiones regulares (patrón) para controlar el formato de los números;
- reglas condicionales (if/then/else) para adaptar los campos obligatorios en función del tipo de pago.
A continuación, en el lado de 4D, basta con validar la respuesta:
var $response; $schema; $result : Object
$response := JSON Parse($json; *)
$schema := JSON Parse($jsonSchema)
$result := JSON Validate($response; $schema)
If ($result.success)
// your treatment
Else
// manage errors
End if
Gracias a la validación integrada, tu código 4D sigue siendo sencillo: no es necesario comprobar manualmente las condiciones en función del método de pago.
El esquema se convierte en una verdadera especificación funcional que puede compartirse entre el equipo de backend, el de front-end o incluso socios externos.
Compatibilidad
Cada esquema JSON especifica el estándar que se debe utilizar a través del atributo $schema.
En 4D, solo se admiten dos analizadores de esquemas JSON:
- Borrador-04
- Borrador 2020-12
El analizador seleccionado viene determinado exclusivamente por el valor de la propiedad $schema en el documento JSON Schema.
Por ejemplo:
- Para utilizar Draft-04:
«$schema»: «http://json-schema.org/draft-04/schema#»
- Para utilizar el borrador 2020-12:
"$schema": "https://json-schema.org/draft/2020-12/schema"
Esto significa que sus esquemas existentes basados en el Borrador-04 seguirán funcionando perfectamente, al tiempo que le ofrecen la libertad de adoptar la nueva versión a su propio ritmo.
Si no se especifica el atributo $schema, 4D utiliza por defecto el Borrador-04. Sin embargo, recomendamos encarecidamente especificar el estándar que se va a utilizar. Si comparte su esquema para validar las respuestas de su API REST, o para explicar el formato de respuesta a una IA, es necesario que sepan qué versión del esquema está utilizando.
Puntos clave
Con 4D 21 R3, el comando JSON Validate se ajusta a los estándares modernos de validación de JSON, lo que permite validar datos procedentes de API de IA o de cualquier otro servicio web. Te beneficias de:
- compatibilidad con el último estándar JSON Schema,
- nuevas palabras clave más potentes,
- una compatibilidad mejorada con las herramientas del sector,
- mientras se mantiene la compatibilidad con sus esquemas existentes.
Al combinar JSON Validate con llamadas a API en sus proyectos 4D, refuerza la fiabilidad de sus integraciones de IA y protege sus flujos de datos, sin ningún esfuerzo adicional. Esta actualización sitúa a 4D entre las plataformas capaces de hablar el lenguaje de las API modernas, los microservicios y la IA generativa.
Por el momento, no se pueden publicar comentarios en esta entrada.