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
- 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.
- 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.
- 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.