JSON in ein GraphQL-Schema umwandeln — Numio
Erzeugt aus Beispiel-JSON GraphQL-SDL-Objekttypen. Die Wurzel wird zu AutogeneratedMainType, jedes verschachtelte Objekt oder Array von Objekten wird zu einem benannten Typ, und alle Array-Elemente werden zu einem Typ zusammengeführt.
Aus einer Antwort eines bestehenden REST-Endpunkts Typen für einen GraphQL-Wrapper darum entwerfen.
JSON
GraphQL
Wann sie hilft
- Aus einer Antwort eines bestehenden REST-Endpunkts Typen für einen GraphQL-Wrapper darum entwerfen.
- Aus Beispieldaten ein Ausgangsschema für einen Mock-Server oder einen Schema-first-Prototyp gewinnen.
Anwendung
- Füge ein JSON-Objekt oder ein Array von Objekten, die zu einem Root-Typ zusammengeführt werden, in den linken Editor ein oder öffne über die Schaltfläche zum Laden einer Datei eine UTF-8-Datei.
- Prüfe die erzeugten Typen: Die Namen stammen von den Schlüsseln (posts wird zu Posts), und Skalare werden auf String, Int, Float oder Boolean abgebildet.
- Kopiere die SDL, ergänze dann ! für Pflichtfelder, ändere id-Felder in ID und benenne AutogeneratedMainType um.
JSON-Objekt
{
"id": "u_1",
"name": "Ada",
"age": 36,
"score": 9.5,
"nickname": null,
"tags": ["math"],
"address": { "city": "London" },
"posts": [{ "id": 7, "title": "Notes" }]
}GraphQL-Schema (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
}Details und Einschränkungen
Felder werden über alle Array-Elemente zusammengeführt. null und leere Arrays werden zu String und [String]; Int gemischt mit Float ergibt Float, andere Konflikte fallen auf String zurück.
Typnamen stammen von den Schlüsseln (posts wird zu Posts). Enthält derselbe Schlüssel unterschiedlich aufgebaute Objekte, wird das spätere nach seinem Elternelement benannt (z. B. AB), statt das frühere zu überschreiben.
Es werden kein ! (non-null), kein ID, kein Query-Typ und keine Input-Typen erzeugt. Ganzzahlen außerhalb des 32-Bit-Bereichs erhalten den Typ Float, da GraphQL-Int 32 Bit hat.
Läuft im Browser, und das Ergebnis wird mit Prettier formatiert; bei ungültigem JSON wird der Parse-Fehler angezeigt.
FAQ
Kann ich ein JSON-Array auf oberster Ebene umwandeln?
Ja, wenn es Objekte enthält: Alle Elemente werden zu AutogeneratedMainType zusammengeführt, sodass auch Felder enthalten sind, die nur in einigen Elementen vorkommen. Ein Root-Array aus einfachen Werten wird abgelehnt, da es keine Felder hat.
Warum ist mein id-Feld String statt ID?
Typen werden nur aus dem JSON-Wert abgeleitet: Eine String-id wird zu String, eine Zahl zu Int. Ändere sie von Hand in ID.
Wie werden null-Werte typisiert?
Als String, da ein null-Wert keinen Typ trägt. Ersetze ihn durch einen echten Beispielwert, wenn das Feld eine Zahl oder ein Objekt ist.