Zum Inhalt springen

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.

GraphQL Schema

Introspection JSON

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

  1. Füge die Schema-SDL in den Editor GraphQL Schema ein.
  2. Warte auf das JSON im Panel Introspection JSON; selbst ein Schema mit einem Feld ergibt rund tausend Zeilen.
  3. 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.

Spezifikationen und Referenzen