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.
Inhaltsverzeichnis
- 1. Das Schema als Teamvertrag: Warum Koordination nötig ist
- 2. Introspection: Was es ist und wo es endet
- 3. SDL: Das Schema als lesbares Textdokument
- 4. SDL-Versionierung: Schema-Änderungen nachvollziehbar machen
- 5. Schema Registry: Single Source of Truth für Teams
- 6. Schema-Checks in der CI-Pipeline
- 7. Introspection und SDL in Magento-Projekten
- 8. Introspection und Sicherheit: Was in Produktion gilt
- 9. Registry-Optionen im Vergleich
- 10. Zusammenfassung
- 11. FAQ
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.