Saltar al contenido

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

  1. 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.
  2. 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.
  3. 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.

Especificaciones y referencias