GraphQL-Introspektions-JSON generieren — Numio
Wandelt GraphQL-SDL mit @graphql-codegen/introspection in das JSON-Ergebnis einer Standard-Introspection-Query um. Die Ausgabe enthält ein __schema-Objekt auf oberster Ebene mit Root-Typen, allen Typen einschließlich der eingebauten sowie Direktiven.
Eine schema.json für Tools erzeugen, die Introspection-JSON statt SDL erwarten, etwa manche IDE-Plugins und Client-Generatoren.
Wann sie hilft
- Eine schema.json für Tools erzeugen, die Introspection-JSON statt SDL erwarten, etwa manche IDE-Plugins und Client-Generatoren.
- Untersuchen, wie der Typ eines Felds in Introspection-Daten in die Kinds NON_NULL und LIST verpackt wird.
Anwendung
- Füge die Schema-SDL in den Editor GraphQL Schema ein.
- Warte auf das JSON im Panel Introspection JSON; selbst ein Schema mit einem Feld ergibt rund tausend Zeilen.
- Kopiere oder lade das JSON herunter und speichere es, zum Beispiel als schema.json.
GraphQL-Schema
type Query {
hello(name: String): String!
}Introspection-JSON
{
"__schema": {
"queryType": {
"name": "Query"
},
"mutationType": null,
"subscriptionType": null,
"types": [
{
"kind": "OBJECT",
"name": "Query",
"description": null,
"fields": [
{
"name": "hello",
"description": null,
"args": [
{
"name": "name",
"description": null,
"type": {
"kind": "SCALAR",
"name": "String",
"ofType": null
…Details und Einschränkungen
Eingebaute Skalare (String, Boolean), die Introspection-Typen (__Schema, __Type, __Field und weitere) und die eingebauten Direktiven (include, skip, deprecated, specifiedBy) sind immer enthalten.
Das JSON ist nicht in einen "data"-Schlüssel eingebettet; es beginnt direkt mit __schema.
Die Umwandlung läuft in einem Web Worker im Browser. Diese Seite nimmt nur ein Schema entgegen; sie fragt keinen laufenden Endpoint ab.
FAQ
Kann ich Introspection-JSON von einer URL abrufen?
Nein. Die Seite wandelt eingefügte SDL um; sie sendet keine Introspection-Queries an einen Server. Exportiere die SDL zuerst von deinem Server und füge sie dann hier ein.
Sind veraltete Felder enthalten?
Ja. Jedes Feld und jeder Enum-Wert wird mit isDeprecated und deprecationReason aufgeführt, sodass mit @deprecated markierte Felder mit isDeprecated: true erscheinen.
Warum ist die Ausgabe für ein kleines Schema so groß?
Introspection-Ergebnisse beschreiben das gesamte Typsystem, einschließlich eingebauter Skalare, der Introspection-Metatypen und der Direktivendefinitionen, nicht nur deine eigenen Typen.