Convertir JSON a un esquema GraphQL — Numio
Genera tipos de objeto en SDL de GraphQL a partir de JSON de ejemplo. La raíz pasa a ser AutogeneratedMainType, cada objeto anidado o array de objetos se convierte en un tipo con nombre y todos los elementos de un array se combinan en un único tipo.
Preparar los tipos de un wrapper GraphQL sobre un endpoint REST existente a partir de una de sus respuestas.
JSON
GraphQL
Cuándo usarla
- Preparar los tipos de un wrapper GraphQL sobre un endpoint REST existente a partir de una de sus respuestas.
- Obtener un esquema inicial para un servidor mock o un prototipo schema-first a partir de datos de ejemplo.
Cómo usarla
- Pega en el editor izquierdo un objeto JSON, o un array de objetos que se combinan en un único tipo raíz, o usa el botón de cargar archivo para abrir un archivo UTF-8.
- Revisa los tipos generados: los nombres salen de las claves (posts pasa a Posts) y los escalares se asignan a String, Int, Float o Boolean.
- Copia el SDL, añade ! en los campos obligatorios, cambia los campos id a ID y renombra AutogeneratedMainType.
Objeto JSON
{
"id": "u_1",
"name": "Ada",
"age": 36,
"score": 9.5,
"nickname": null,
"tags": ["math"],
"address": { "city": "London" },
"posts": [{ "id": 7, "title": "Notes" }]
}Esquema GraphQL (SDL)
type AutogeneratedMainType {
id: String
name: String
age: Int
score: Float
nickname: String
tags: [String]
address: Address
posts: [Posts]
}
type Address {
city: String
}
type Posts {
id: Int
title: String
}Detalles y limitaciones
Los campos se combinan entre todos los elementos del array. null y los arrays vacíos pasan a String y [String]; Int mezclado con Float da Float, y los demás conflictos vuelven a String.
Los nombres de tipo salen de las claves (posts pasa a Posts). Si la misma clave contiene objetos con formas distintas, el posterior recibe un nombre basado en su padre (por ejemplo, AB) en lugar de sobrescribir al anterior.
No se generan ! (no nulo), ID, el tipo Query ni tipos input. Los enteros fuera del rango de 32 bits reciben el tipo Float, porque Int de GraphQL es de 32 bits.
Se ejecuta en tu navegador y el resultado se formatea con Prettier; si el JSON no es válido, se muestra el error de análisis.
FAQ
¿Puedo convertir un array JSON en la raíz?
Sí, si contiene objetos: todos los elementos se combinan en AutogeneratedMainType, así que se incluyen los campos que solo aparecen en algunos elementos. Un array raíz de valores simples se rechaza porque no tiene campos.
¿Por qué mi campo id es String en lugar de ID?
Los tipos salen solo del valor JSON: un id de tipo cadena pasa a String y uno numérico a Int. Cámbialo a mano a ID:.
¿Qué tipo reciben los valores null?
String, porque un valor null no aporta tipo. Sustitúyelo por un valor de ejemplo real si el campo es un número o un objeto.