{ }
type
GraphQL · Introspection · SDL · Schema Registry · Teams
Introspection, SDL und Schema Registry
in Teams koordiniert nutzen

In vielen GraphQL-Projekten ist das Schema der einzige Vertrag zwischen Frontend- und Backend-Teams – aber niemand kümmert sich darum, ihn zu versionieren, zu teilen oder zu prüfen. Introspection, SDL und Schema Registries sind die drei Bausteine, mit denen Teams das Schema zur echten Single Source of Truth machen.

14 Min. Lesezeit Introspection · SDL · Schema Registry · CI/CD · Magento Apollo Studio · Hive · Inspector · GraphQL Mesh

1. Das Schema als Teamvertrag: Warum Koordination nötig ist

Sobald mehr als ein Team an einer GraphQL-API arbeitet, entsteht ein Koordinationsproblem. Das Frontend-Team verlässt sich darauf, dass bestimmte Felder existieren und bestimmte Typen haben. Das Backend-Team entwickelt das Schema weiter und weiß nicht immer, welche Felder welche Clients tatsächlich nutzen. Ohne explizite Koordination landen Breaking Changes unbemerkt in der Produktion – oder Schema-Änderungen werden so vorsichtig durchgeführt, dass die API nicht wächst, weil niemand sicher weiß, ob eine Änderung sicher ist.

Introspection, SDL und Schema Registry sind die drei Werkzeuge, die dieses Koordinationsproblem lösen. Introspection macht das laufende Schema maschinenlesbar. SDL macht es menschenlesbar und versionierbar. Eine Schema Registry macht es zur geteilten Single Source of Truth mit Änderungshistorie. Die drei Konzepte bauen aufeinander auf, können aber auch unabhängig eingesetzt werden – je nach Reife und Größe des Teams.

2. Introspection: Was es ist und wo es endet

Introspection ist eine eingebaute GraphQL-Funktion, die es Clients erlaubt, das vollständige Schema über spezielle Queries abzufragen. Die wichtigste Introspection-Query ist __schema, die alle Typen, Felder, Argumente und Direktiven des Schemas zurückgibt. Darauf basieren alle Schema-Exploration-Tools: GraphiQL, Altair, Apollo Studio und GraphQL Inspector nutzen Introspection, um das Schema zu verstehen und darzustellen.

Die Grenzen von Introspection liegen in der Persistenz und Versionierung: Introspection beschreibt immer den aktuellen Zustand des laufenden Servers – kein historisches Snapshots, keine Änderungshistorie. Wer wissen will, was sich zwischen zwei Deployments geändert hat, muss die Introspection-Ergebnisse selbst speichern und vergleichen. Das ist der Ausgangspunkt für SDL-Versionierung: Introspection-Ergebnis in eine SDL-Datei umwandeln, diese im Repository speichern, und bei Bedarf vergleichen.


# Standard introspection query — used by all GraphQL tools
# Returns the complete schema structure at runtime

query IntrospectionQuery {
  __schema {
    queryType { name }
    mutationType { name }
    subscriptionType { name }
    types {
      ...FullType
    }
    directives {
      name
      description
      locations
      args { ...InputValue }
    }
  }
}

fragment FullType on __Type {
  kind
  name
  description
  fields(includeDeprecated: true) {
    name
    description
    args { ...InputValue }
    type { ...TypeRef }
    isDeprecated
    deprecationReason
  }
  inputFields { ...InputValue }
  interfaces { ...TypeRef }
  enumValues(includeDeprecated: true) {
    name
    description
    isDeprecated
    deprecationReason
  }
  possibleTypes { ...TypeRef }
}

fragment TypeRef on __Type {
  kind
  name
  ofType { kind name ofType { kind name ofType { kind name } } }
}

fragment InputValue on __InputValue {
  name
  description
  type { ...TypeRef }
  defaultValue
}

3. SDL: Das Schema als lesbares Textdokument

Die Schema Definition Language (SDL) ist die Textrepräsentation eines GraphQL-Schemas: eine Datei mit der Endung .graphql oder .graphqls, die alle Typen, Felder, Enums, Interfaces und Direktiven des Schemas in lesbarer Syntax enthält. SDL ist das Dokument, das Entwickler beim Schema-Design direkt schreiben und lesen. Es ist versionierbar in Git, reviewbar im Merge-Request-Prozess und als Vertragsdokument mit dem Frontend-Team teilbar.

Der Unterschied zwischen SDL und Introspection-Ergebnis ist die Richtung: SDL ist der Code-First- oder Schema-First-Input (je nach Ansatz), Introspection ist der Output des laufenden Systems. In einem Schema-First-Ansatz schreibt man die SDL zuerst und generiert den Code daraus. In einem Code-First-Ansatz generiert man die SDL aus dem Code. In beiden Fällen ist die SDL das gemeinsame Dokument, auf das sich Frontend- und Backend-Team beim Schema-Design beziehen.

4. SDL-Versionierung: Schema-Änderungen nachvollziehbar machen

SDL-Versionierung bedeutet, die aktuelle SDL nach jedem Deployment zu exportieren und im Repository zu speichern. Das klingt einfach, erfordert aber einen definierten Prozess: Wer exportiert? Wann? Und wo wird die Datei gespeichert? Der einfachste Ansatz: Ein Deployment-Skript exportiert die SDL nach einem erfolgreichen Deployment und erstellt einen automatischen Commit. GraphQL Inspector vergleicht im nächsten Merge-Request die neue SDL gegen die gespeicherte Referenz.

Ein fortgeschrittener Ansatz ist die SDL als versioniertes Artefakt im Build-System: Bei jedem CI-Lauf wird die SDL aus dem Schema-Code generiert und als Build-Artefakt gespeichert. Jede Version bekommt eine Versionsnummer, und der Verlauf ist im Build-System einsehbar. Das ist näher an einer vollständigen Schema Registry, ohne einen externen Registry-Service zu erfordern. In Magento erzeugt man die SDL über bin/magento dev:graphql:schema und legt sie in einem eigenen Verzeichnis im Projektrepository ab.


# Versioned SDL example — stored in repository after each deployment
# File: schema/magento-graphql.graphql

schema {
  query: Query
  mutation: Mutation
}

type Query {
  products(
    search: String
    filter: ProductAttributeFilterInput
    pageSize: Int = 20
    currentPage: Int = 1
    sort: ProductAttributeSortInput
  ): Products

  categories(
    filters: CategoryFilterInput
    pageSize: Int = 20
    currentPage: Int = 1
  ): CategoryResult

  customer: Customer
  cart(cart_id: String!): Cart
}

# Deprecated field — preserved in SDL for reference during migration
type Product {
  description: ComplexTextValue @deprecated(reason: "Use content_block instead")
  content_block: ContentBlock   # replacement field
  sku: String!
  name: String!
  url_key: String!
}

5. Schema Registry: Single Source of Truth für Teams

Eine Schema Registry ist ein dedizierter Dienst, der alle Schema-Versionen speichert, Änderungshistorie führt, Consumer-Queries registriert und Breaking-Change-Checks vor Deployments durchführt. Die bekanntesten Implementierungen sind Apollo Studio und GraphQL Hive – beide bieten eine vollständige Registry mit Web-UI, API und CLI-Integration. Der zentrale Nutzen einer Registry gegenüber reiner SDL-Versionierung im Git: Jede Schema-Änderung kann direkt gegen bekannte Consumer-Queries geprüft werden, nicht nur gegen die gespeicherte SDL-Datei.

Für Teams, die keine externe Registry nutzen wollen, ist eine einfachere Alternative möglich: Das Schema-Git-Repository als lightweight Registry. Jede SDL-Version als Tagged Commit, Diff über git diff tag1 tag2 schema.graphql, Consumer-Queries als Fixture-Dateien im Repository. Das erfordert mehr manuelle Disziplin, ist aber ohne externen Service und ohne Konfigurationsaufwand sofort einsetzbar. Der Schritt zur echten Registry-Lösung lohnt sich, wenn das Team wächst oder mehrere unabhängige Services auf dieselbe API zugreifen.

6. Schema-Checks in der CI-Pipeline

Schema-Checks in der CI-Pipeline sind der wichtigste operative Vorteil eines guten Schema-Managements. Das Grundprinzip: Bevor ein Merge-Request gemergt werden darf, prüft ein automatisierter Check, ob die Schema-Änderungen Breaking Changes einführen. GraphQL Inspector liefert diese Funktion mit einem einzigen CLI-Kommando: graphql-inspector diff schema-old.graphql schema-new.graphql. Das Ergebnis ist ein strukturierter Bericht über Breaking, Dangerous und Non-Breaking Changes.

Ein vollständiger CI-Workflow kombiniert Schema-Diff mit Consumer-Query-Validierung: Zuerst wird geprüft, ob vorhandene Frontend-Queries noch valide sind (graphql-inspector validate). Dann wird geprüft, ob neue Breaking Changes eingeführt werden (graphql-inspector diff). Das Ergebnis beider Checks wird als Kommentar im Merge-Request angezeigt – Entwickler sehen sofort, welche Auswirkungen ihre Schema-Änderung hat, ohne die Dokumentation zu lesen oder sich mit dem Frontend-Team abstimmen zu müssen.

7. Introspection und SDL in Magento-Projekten

In Magento ist das GraphQL-Schema über die schema.graphqls-Dateien in jedem Modul definiert. Das Gesamtschema entsteht durch Zusammenführung aller Modul-Schemas zur Laufzeit. Den vollständigen Export erhält man über bin/magento dev:graphql:schema – das Kommando ist nur im Developer Mode verfügbar und erzeugt eine vollständige SDL-Datei des aktuellen Schemas inklusive aller installierten Erweiterungsmodule. Diese Datei ist der Ausgangspunkt für alle weiteren Schema-Management-Aktivitäten.

Introspection ist in Magento standardmäßig aktiviert, auch in der Produktion. Das ist ein bekanntes Sicherheitsthema – Introspection gibt Angreifern das vollständige Schema inklusive aller Felder und Typen. Für Produktionsumgebungen empfiehlt sich das Deaktivieren von Introspection, sofern kein Monitoring-Tool explizit darauf angewiesen ist. In Hyvä-Frontends und Headless-Setups, wo das Frontend bei der Entwicklung auf Introspection angewiesen ist, kann man Introspection auf die Staging-Umgebung beschränken und auf Produktionsservern deaktivieren.

8. Introspection und Sicherheit: Was in Produktion gilt

Introspection in der Produktion zu aktivieren ist eine bewusste Entscheidung, die Konsequenzen hat. Ein Angreifer mit Introspection-Zugang erhält das vollständige Schema: alle Typen, alle Felder, alle Argumente – inklusive etwaiger interner Felder, die für Entwickler gedacht sind, aber eigentlich keine öffentliche API sein sollten. In vielen GraphQL-Implementierungen ist Introspection im Developer Mode automatisch aktiv und in Produktion deaktiviert – Magento folgt diesem Muster nicht konsequent.

Die pragmatische Empfehlung: Introspection in der Produktion deaktivieren, sobald alle Monitoring-Tools auf alternative Authentifizierungswege umgestellt sind. Wenn Apollo Studio oder Hive in der Produktion läuft und Introspection benötigt, dann den Zugang auf authentifizierte Requests beschränken. GraphQL-Zugriff auf interne Tools ist keine Ausrede, Introspection ungesichert öffentlich zu lassen. Ein Angreifer, der das Schema kennt, kann gezielt nach teuren Queries und ungepatchten Feldern suchen.

Ansatz Aufwand Vorteil Ideal für
SDL in Git Gering Kein externer Service nötig Kleine Teams, Einstieg
Inspector in CI Gering Schema-Diffs automatisiert Alle Teams ab 2 Entwickler
GraphQL Hive Mittel Open Source, self-hosted möglich Teams ohne Apollo-Stack
Apollo Studio Mittel bis hoch Usage-Daten für Schema-Entscheidungen Apollo-Stacks, große Teams

9. Registry-Optionen im Vergleich

Die Entscheidung für eine Schema-Registry-Lösung hängt von drei Faktoren ab: Teamgröße, Budget und Stack. Für ein kleines Team, das Magento GraphQL betreibt, ist SDL in Git mit Inspector-CI der pragmatische Einstieg – kein externer Service, kein Betriebsaufwand, sofort umsetzbar. Für Teams mit mehreren Konsumenten und dem Bedarf nach Usage-Tracking ist GraphQL Hive die neutralere Lösung ohne Vendor-Lock-in. Apollo Studio ist die vollständigste Lösung, aber am engsten an den Apollo-Ökosystem gebunden.

Was alle Optionen gemeinsam haben: Sie erfordern eine Disziplin im Team, die SDL als Vertragsdokument zu behandeln. Keine Registry der Welt schützt vor Breaking Changes, wenn Schema-Änderungen ohne Review direkt auf dem Produktionsserver landen. Der Prozess – SDL exportieren, vergleichen, reviewen, deployen – ist die eigentliche Schutzmaßnahme. Die Registry ist das Werkzeug, das diesen Prozess automatisiert und skalierbar macht.

Introspection, SDL und Schema Registry — Das Wichtigste auf einen Blick

Introspection

Macht das laufende Schema maschinenlesbar. In Produktion deaktivieren oder absichern. Basis für alle Schema-Exploration-Tools und SDL-Export.

SDL

Das Schema als lesbares, versionierbares Textdokument – der Vertrag zwischen Frontend- und Backend-Team, reviewbar im Merge-Request-Prozess.

Schema Registry

Single Source of Truth mit Änderungshistorie, Consumer-Query-Tracking und automatischen Breaking-Change-Checks vor Deployments.

Empfehlung

SDL in Git + Inspector in CI als Einstieg. Hive oder Apollo Studio wenn Usage-Tracking und vollständige Registry gebraucht werden.

10. Zusammenfassung

Introspection, SDL und Schema Registry sind keine Einzellösungen, sondern Bausteine eines vollständigen Schema-Managements. Introspection ist der Ausgangspunkt – es macht das Schema der Maschine zugänglich. SDL macht es dem Menschen zugänglich und versionierbar. Eine Schema Registry macht es dem Team zugänglich: mit Änderungshistorie, Consumer-Tracking und automatisierten Checks. Teams, die alle drei Bausteine nutzen, können Schema-Änderungen durchführen, ohne die andere Seite zu überraschen.

In Magento-Projekten ist der erste Schritt immer der SDL-Export und dessen Versionierung im Repository. Das kostet wenig Aufwand und liefert sofort Mehrwert: Schema-Änderungen werden im Merge-Request-Review sichtbar, weil die SDL-Datei im Diff auftaucht. GraphQL Inspector in der CI macht diesen manuellen Review mit einem automatisierten Check ergänzbar. Das ist der vollständige pragmatische Stack für Magento-Teams ohne externen Registry-Service.

11. FAQ: Introspection, SDL und Schema Registry in Teams

1Was ist GraphQL Introspection?
Eingebaute Funktion, die Clients erlaubt, das vollständige Schema über __schema-Queries abzufragen. Basis für alle Schema-Exploration-Tools.
2SDL vs. Introspection?
SDL ist das lesbare Textdokument. Introspection ist die Laufzeit-Abfrage als JSON. Beide beschreiben dasselbe Schema – SDL ist versionierbar, Introspection ist dynamisch.
3Introspection in Produktion deaktivieren?
Ja, empfohlen. Introspection gibt Angreifern das vollständige Schema. Entweder deaktivieren oder hinter Authentifizierung schützen.
4Schema in Magento exportieren?
bin/magento dev:graphql:schema im Developer Mode. Vollständige SDL aller Modul-Schemas – ins Repository einzuchecken als erster Schritt zur Versionierung.
5Was ist eine Schema Registry?
Dienst mit Änderungshistorie, Consumer-Query-Tracking und Breaking-Change-Checks. Apollo Studio und GraphQL Hive sind die bekanntesten Lösungen.
6Externe Schema Registry notwendig?
Nein. SDL in Git + Inspector in CI reicht für viele Teams. Externe Registry wenn Usage-Tracking oder viele unabhängige Clients gebraucht werden.
7Was ist ein Breaking Change in der Registry?
Felder entfernen, Argument-Typen inkompatibel ändern, Non-Null hinzufügen wo vorher Null erlaubt war. Registry erkennt das automatisch vor Deployment.
8Schema-Checks in GitHub Actions?
GitHub Action von @graphql-inspector nutzen. Versionierte SDL als Referenz, neue SDL im CI generieren, Ergebnis als Merge-Request-Kommentar.
9Hive vs. Apollo Studio?
Hive Open Source, self-hostable – wichtig für Datenschutz. Apollo Studio ausgereifter, aber enger an Apollo-Stack gebunden. Ohne Apollo-Stack: Hive bevorzugen.
10SDL in Git – wann ausreichend?
Für kleinere Teams mit einem Backend-Consumer. Sobald Usage-Tracking oder viele unabhängige Clients benötigt werden, lohnt eine vollständige Registry.