Ir al contenido principal
CuteJSON
↑↓ Navegar Enter Seleccionar Esc Cerrar

Como generar un JSON Schema a partir de un ejemplo real

Publicado 2 min de lectura Por Akash Kinkar Pandey

Un schema generado a partir de un documento de ejemplo describe lo que estaba en el ejemplo. Es un punto de partida, no una especificacion impuesta desde algun otro lugar, y esta herramienta esta construida tratandolo de esa manera en lugar de implicar mas certeza de la que los datos realmente soportan.

Usar el generador de JSON Schema

Pega un documento, o un arreglo de varios registros, elige un borrador (2020-12 o Draft 07), si detectar formatos de cadena, y si marcar claves requeridas, luego presiona Generar schema.

Dado

[
  {"id": 1, "name": "a", "score": 1},
  {"id": 2, "name": "b", "score": 1.5}
]

ambos registros llevan id, name y score, por lo que los tres aparecen en required. id es un numero entero en cada registro y se convierte en "integer". score tiene una fraccion en el segundo registro, 1.5, por lo que su tipo es el mas amplio "number" en lugar de "integer", ya que realmente contiene valores no enteros.

Por que una clave puede desaparecer silenciosamente de required

Agrega un tercer registro, {"id": 3, "name": "c"}, sin campo score, y regenera: score ya no es requerido, mientras que id y name permanecen requeridos. Una clave solo se marca como requerida cuando cada registro en el arreglo la lleva. Un registro que falta un campo no prueba que el campo es opcional en toda tu API, pero si prueba que el schema no puede prometer honestamente que siempre estara ahi, por lo que se vuelve opcional. Esa es la regla que el FAQ en la pagina declara directamente, ya que es el detalle que mas probablemente sorprenda a alguien leyendo el resultado.

Deteccion de formato

Un formato de cadena como una fecha o una direccion de correo electronico solo se afirma cuando cada cadena en esa posicion en cada registro coincide con el mismo patron. Eso es lo que impide que un valor afortunado convierta un campo genuinamente de texto libre en algo que parece un formato de fecha estricto, que luego rechazaria datos reales y validos en el momento en que viera un valor que no fuera realmente una fecha.

Lo que esto no puede saber

El generador solo tiene los registros que pegaste. No puede ver los registros que no pegaste, por lo que un campo que siempre fue un numero positivo en tu ejemplo no tendra un minimum a menos que agregues uno tu mismo, y un campo similar a un enum no se convertira en una palabra clave enum a menos que la agregues. Trata la salida como la forma que tu ejemplo demuestra, y ampliala a mano donde sepas que los datos reales son mas laxos.

Verificar el resultado

Pega el schema generado y un documento en el validador de JSON Schema para ver si realmente acepta el tipo de documentos que esperas que acepte.

Volver a todas las entradas