Pular para o conteúdo

Converter JSON em esquema GraphQL — Numio

Gera tipos de objeto em SDL do GraphQL a partir de JSON de exemplo. A raiz vira AutogeneratedMainType, cada objeto aninhado ou array de objetos vira um tipo nomeado e todos os elementos de um array são mesclados em um único tipo.

Montar os tipos de um wrapper GraphQL sobre um endpoint REST existente a partir de uma de suas respostas.

JSON

GraphQL

Quando usar

  • Montar os tipos de um wrapper GraphQL sobre um endpoint REST existente a partir de uma de suas respostas.
  • Obter um schema inicial para um servidor mock ou um protótipo schema-first a partir de dados de exemplo.

Como usar

  1. Cole no editor da esquerda um objeto JSON, ou um array de objetos que são mesclados em um único tipo raiz, ou use o botão de carregar arquivo para abrir um arquivo UTF-8.
  2. Confira os tipos gerados: os nomes vêm das chaves (posts vira Posts) e os escalares são mapeados para String, Int, Float ou Boolean.
  3. Copie o SDL, adicione ! nos campos obrigatórios, mude os campos id para ID e renomeie 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" }]
}

Schema 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
}

Detalhes e limitações

Os campos são mesclados entre todos os elementos do array. null e arrays vazios viram String e [String]; Int misturado com Float vira Float, e outros conflitos voltam para String.

Os nomes dos tipos vêm das chaves (posts vira Posts). Se a mesma chave contiver objetos com formatos diferentes, o posterior recebe um nome baseado no pai (por exemplo, AB) em vez de sobrescrever o anterior.

Não são gerados ! (não nulo), ID, tipo Query nem tipos input. Inteiros fora da faixa de 32 bits recebem o tipo Float, porque o Int do GraphQL tem 32 bits.

Roda no seu navegador e o resultado é formatado com Prettier; JSON inválido mostra o erro de análise.

FAQ

Posso converter um array JSON na raiz?

Sim, se ele contiver objetos: todos os elementos são mesclados em AutogeneratedMainType, então campos que aparecem só em alguns elementos são incluídos. Um array raiz de valores simples é rejeitado porque não tem campos.

Por que meu campo id é String em vez de ID?

Os tipos vêm apenas do valor JSON: um id string vira String e um numérico vira Int. Mude para ID: à mão.

Que tipo recebem os valores null?

String, já que um valor null não traz tipo. Substitua-o por um valor de exemplo real se o campo for um número ou um objeto.

Especificações e referências