{ }
type
GraphQL · Schema Review · Teams · CI/CD · Breaking Changes
Schema Reviews für Teams:
Was vor dem Merge geprüft werden sollte

Ein GraphQL-Schema ohne Review-Prozess entwickelt sich unkontrolliert: Breaking Changes, inkonsistente Namenskonventionen und fehlende Dokumentation schleichen sich ein. Dieser Artikel zeigt, welche Punkte vor jedem Merge geprüft werden sollten – manuell und automatisch mit Tooling.

15 Min. Lesezeit Schema Diff · Breaking Changes · GraphQL Inspector · CI-Integration GraphQL · Magento · Team-Prozesse

1. Warum Schema Reviews kein optionaler Prozess sind

Ein GraphQL-Schema ist ein öffentlicher Vertrag – zwischen dem Backend-Team, das das Schema definiert, und dem Frontend-Team, das Queries und Mutations dagegen schreibt. Ein Code-Review für Backend-Klassen und Frontend-Komponenten ist in den meisten Teams etabliert. Ein dedizierter Review-Prozess für das GraphQL-Schema fehlt dagegen oft. Das hat Folgen: Breaking Changes landen unbemerkt in der Produktion, Typnamen folgen inkonsistenten Konventionen, und neue Felder sind undokumentiert, weil niemand @doc-Annotationen als Review-Kriterium betrachtet.

Der Unterschied zum normalen Code-Review: bei Code-Reviews prüft man Implementierungen – Logik, Lesbarkeit, Tests. Bei Schema-Reviews prüft man den Vertrag – Kompatibilität, Konsistenz und Verständlichkeit. Diese beiden Dimensionen überschneiden sich kaum, weshalb Schema-Reviews ein eigener Prozessschritt sein sollten, nicht ein Unteraspekt des normalen Code-Reviews. Das gilt besonders in Teams, in denen Backend- und Frontend-Entwickler separat arbeiten und das Schema die einzige Koordinationsschicht ist.

2. Breaking Changes: was sie sind und warum sie schaden

Ein Breaking Change im GraphQL-Schema ist jede Änderung, die bestehende Queries oder Mutations ungültig macht oder ihr Verhalten ändert. Das Umfasst: das Entfernen eines Feldes oder Typs, das Ändern des Typs eines Feldes (z.B. von String zu Int), das Hinzufügen eines Non-Null-Constraints auf ein bisher nullable Feld, das Umbenennen eines Typs oder Feldes und das Ändern von Enum-Werten. Jede dieser Änderungen kann einen bereits deployten Frontend-Client brechen, ohne dass eine Fehlermeldung im Backend erscheint.

Besonders tückisch: non-breaking auf den ersten Blick, breaking in der Praxis. Das Hinzufügen eines neuen Pflichtarguments zu einer bestehenden Query ist ein Breaking Change – bestehende Queries, die das Argument nicht übergeben, werden ungültig. Das Ändern der Semantik eines Feldes ohne Typänderung – zum Beispiel ein Preisfeld, das plötzlich Netto statt Brutto liefert – ist kein technischer Breaking Change, aber ein fachlicher. Ein gutes Schema-Review erkennt beide Kategorien.

3. Die Review-Checkliste: was manuell geprüft werden sollte

Eine Schema-Review-Checkliste für GraphQL-Teams sollte mindestens diese Punkte abdecken: Erstens, sind alle neuen Felder und Argumente mit @doc-Annotationen versehen? Ein Feld ohne Beschreibung ist für Frontend-Teams und neue Entwickler schwer nutzbar. Zweitens, folgen neue Typnamen der vereinbarten Namenskonvention? Prefixing, CamelCase, keine Abkürzungen – was das Team vereinbart hat, muss konsequent gelten. Drittens, sind alle Mutations-Argumente in Input-Types gekapselt? Vierte: sind Breaking Changes bewusst getroffen und kommuniziert worden?

Fünftens: sind neue Non-Null-Markierungen (!) auf Output-Feldern sorgfältig geprüft? Ein non-null Output-Feld, das in bestimmten Zuständen null zurückgibt, schlägt Queries fehl. Sechstens: sind neue Enums vollständig dokumentiert und sind alle Werte in der Implementierung abgedeckt? Siebtens: ist die Granularität der Typen angemessen – gibt es neue generische "god types", die zu viele Verantwortlichkeiten sammeln? Achtens: funktionieren Introspection und GraphiQL mit den neuen Typen korrekt?


# Breaking changes to catch in schema review

# ❌ Breaking: field removed
# Before:  type Product { description: String }
# After:   type Product { }   # existing queries break

# ❌ Breaking: field type changed
# Before:  price: Float
# After:   price: String      # type incompatibility

# ❌ Breaking: nullable changed to non-null
# Before:  thumbnail: String
# After:   thumbnail: String! # null return causes query failure

# ✓ Non-breaking: adding optional field
type Product {
  sku: String!
  name: String!
  # New field — nullable, so existing queries still work:
  sustainability_rating: Int @doc(description: "Eco score 1-10; null if not rated")
}

4. Tooling: GraphQL Inspector und automatische Checks

GraphQL Inspector ist das wichtigste Tool für automatische Schema-Reviews. Es vergleicht zwei Schema-Versionen und identifiziert Breaking Changes, Dangerous Changes und Safe Changes – mit klaren Kategorisierungen und menschenlesbaren Fehlermeldungen. Integration in Pull-Request-Workflows: GraphQL Inspector kann als GitHub-Action oder GitLab-CI-Step ausgeführt werden und kommentiert automatisch, welche Schema-Änderungen in einem PR Breaking sind, bevor ein Reviewer überhaupt geschaut hat.

Neben GraphQL Inspector gibt es weitere Werkzeuge: Hive CLI von The Guild ermöglicht Schema-Registry mit versionierter History und Policy-basiertem Breaking-Change-Management. Apollo Studio bietet ähnliche Funktionalität für Apollo-Ökosysteme. Für Magento-spezifische Schema-Reviews gibt es keinen dedizierten Tool-Support, aber GraphQL Inspector funktioniert schema-agnostisch und kann mit jedem SDL-basierten Schema genutzt werden – auch für Magento-Module.


# Schema diff example — what GraphQL Inspector reports
# Running: graphql-inspector diff old-schema.graphqls new-schema.graphqls

# ✓ SAFE: new nullable field added (non-breaking)
type CustomerProfile {
  email: String!
  name: String!
  # + loyalty_points: Int   <-- newly added, nullable = safe
}

# ⚠ DANGEROUS: default value changed
# input SearchInput { pageSize: Int = 10 }  ->  pageSize: Int = 20

# ✗ BREAKING: required argument added to existing field
# Before: products(search: String): ProductList
# After:  products(search: String!, category: String!): ProductList
#                                   ↑ new required arg = breaking

5. Schema Reviews in CI-Pipelines integrieren

Die Integration von Schema-Reviews in CI-Pipelines stellt sicher, dass Breaking Changes nicht durch schnelle Merges in die Hauptbranch gelangen. Der minimale Setup: ein CI-Step, der graphql-inspector diff zwischen dem Schema im Feature-Branch und dem Schema im Hauptbranch ausführt. Bei Breaking Changes schlägt der Step fehl und blockiert den Merge – oder er erzeugt einen Report als PR-Kommentar, der eine bewusste Entscheidung erfordert.

Ein erweiterter CI-Schema-Check umfasst zusätzlich: Validierung gegen definierte Naming-Convention-Regeln (konfigurierbar in .graphqlrc.yml), Prüfung auf fehlende @doc-Annotationen via Custom-Rules, Validierung der Schema-Syntax und ein Snapshot-Test, der das vollständige Schema-SDL in der Versionskontrolle hält. Dieser Schema-Snapshot dient gleichzeitig als Dokumentation und als Baseline für den nächsten Diff. Teams mit mehreren Modulen können jeden Modul-Schema-Snapshot separat verwalten und bei Merge-Konflikten gezielt auflösen.

6. Schema Reviews in Magento-Teams

In Magento-Teams gibt es eine zusätzliche Komplexität bei Schema-Reviews: das Gesamtschema entsteht erst beim Merge aller Modul-Schemata zur Laufzeit. Ein Review der einzelnen schema.graphqls-Datei eines Moduls erfasst nicht die Auswirkungen auf das globale Schema – Namenskonflikte mit anderen Modulen oder Breaking Changes durch Extend-Anweisungen auf Core-Typen sind erst im Kontext des gesamten Schemas sichtbar.

Die Lösung: das vollständige introspizierte Schema nach jeder Änderung exportieren (bin/magento graphql:introspect oder via GraphQL-Introspection-Query) und dieses als Snapshot in der Versionskontrolle halten. Der CI-Step vergleicht dann immer das vollständige generierte Schema – nicht nur die Modul-Datei. So werden Namenskonflikte und globale Breaking Changes erkannt, bevor sie in die Produktion gelangen. In Projekten mit vielen Modulen empfiehlt sich zusätzlich ein dediziertes Test-Environment, das alle Modulen merged und das Schema vor dem Deploy validiert.

7. Falsch / Richtig bei Schema-Änderungen

Der häufigste Fehler bei Schema-Änderungen in Teams: Umbenennen ohne Deprecation-Phase. Ein Feld wird umbenannt, weil der neue Name semantisch treffender ist – aber bestehende Queries brechen sofort. Das korrekte Vorgehen: das alte Feld mit @deprecated(reason: "Use newFieldName instead") markieren, das neue Feld parallel hinzufügen, Frontend-Teams über einen vereinbarten Zeitraum migrieren lassen, dann das alte Feld entfernen. Dieser Prozess ist aufwendiger, aber er verhindert ungeplante Produktionsfehler.

Änderung Falsch Richtig Risiko
Feld umbenennen Direkt umbenennen @deprecated + neues Feld parallel Breaking für alle bestehenden Queries
Pflichtargument hinzufügen Direkt als non-null hinzufügen Nullable mit Default-Wert Bestehende Aufrufe ohne Argument brechen
Typ ändern Float zu String ändern Neues Feld + schrittweise Migration Typ-Inkompatibilität im Client
Feld entfernen Direkt löschen Erst @deprecated, dann entfernen Alle Queries mit diesem Feld brechen
Neues Pflichtfeld Non-null im Output-Type Nullable prüfen, ob sicher Null-Return wirft Runtime-Error

8. Den Review-Prozess als Teamritual etablieren

Ein Schema-Review-Prozess funktioniert nur, wenn er als fester Bestandteil des Merge-Workflows verankert ist – nicht als optionaler Schritt, der unter Zeitdruck weggelassen wird. Das bedeutet: Schema-Änderungen erfordern immer einen Pull Request, nie direktes Pushen in den Hauptbranch. Jeder PR mit Schema-Änderungen braucht mindestens ein Approval von einem Backend- und einem Frontend-Entwickler. Der CI-Check mit GraphQL Inspector läuft automatisch und muss grün sein, bevor ein Merge möglich ist.

Die kulturelle Dimension ist genauso wichtig wie die technische: Schema-Reviews sind kein Qualitätskontrollmechanismus, der Entwicklern misstraut – sie sind ein Koordinationsinstrument zwischen Teams. Ein gut dokumentiertes, konsistentes Schema macht Frontend-Entwickler selbständiger, reduziert Abstimmungsbedarf und verhindert Missverständnisse. Teams, die Schema-Reviews als Investition in bessere Zusammenarbeit verstehen, halten den Prozess aufrecht; Teams, die sie als Bürokratie sehen, umgehen sie sobald möglich.

9. Vergleich: Schema-Review-Methoden

Es gibt verschiedene Methoden für Schema-Reviews, die sich in Aufwand, Zuverlässigkeit und Automationsgrad unterscheiden. Rein manuelle Reviews sind flexibel, aber fehleranfällig und skalieren nicht mit der Teamgröße. Vollständig automatisierte CI-Checks sind zuverlässig für technische Kriterien, erkennen aber keine semantischen Probleme wie geänderte Bedeutungen von Feldern. Die beste Strategie kombiniert beide: automatische Checks als Pflichtschritt, manueller Review für semantische und fachliche Aspekte.

Schema Reviews für Teams — Das Wichtigste auf einen Blick

Breaking Changes

Felder entfernen, Typen ändern, Nullability verschärfen – immer Breaking. Umbenennen über @deprecated und Parallel-Feld statt direkt.

Tooling

GraphQL Inspector als CI-Step pflicht. Automatisch alle Breaking und Dangerous Changes vor dem Merge erkennen und blockieren.

Checkliste

@doc auf allen neuen Feldern. Naming Conventions. Input-Types für Mutations. Non-null-Felder sorgfältig prüfen. Enum-Vollständigkeit.

Prozess

Schema-PR immer mit Backend- und Frontend-Approval. CI-Check als Pflicht. Schema-Snapshot in Versionskontrolle halten.

10. Zusammenfassung

Ein GraphQL Schema Review ist keine Bürokratie, sondern eine notwendige Koordinationsmaßnahme zwischen Backend und Frontend. Die technischen Aspekte – Breaking Changes, Naming Conventions, Nullability, Dokumentation – lassen sich größtenteils automatisch prüfen. GraphQL Inspector als CI-Step macht die meisten technischen Verstöße sichtbar, bevor ein menschlicher Reviewer überhaupt liest.

Was Tooling nicht leisten kann: semantische Reviews, fachliche Korrektheit und die Prüfung, ob ein neues Feld wirklich das modelliert, was der Client braucht. Dafür bleibt der manuelle Review unersetzlich – insbesondere das Approval durch einen Frontend-Entwickler, der die Perspektive des API-Konsumenten einbringt. Teams, die beide Dimensionen kombinieren – automatische technische Checks und manuellen semantischen Review – schützen ihr Schema vor den häufigsten Kategorie von Produktionsproblemen in GraphQL-basierten Systemen.

11. FAQ: GraphQL Schema Reviews für Teams

1Was ist ein Breaking Change im Schema?
Felder entfernen, Typen ändern, nullable zu non-null, Pflichtargumente hinzufügen oder Felder umbenennen.
2Was ist GraphQL Inspector?
CLI-Tool und CI-Integration, die zwei Schema-Versionen vergleicht und Breaking/Dangerous/Safe Changes klassifiziert.
3Wie deprecated man ein Feld?
@deprecated(reason: "Use newFieldName instead") – Feld bleibt nutzbar, erscheint in GraphiQL als veraltet.
4Was prüft man manuell im Review?
@doc auf allen Feldern, Naming Conventions, Input-Types für Mutations, Nullability und semantische Korrektheit.
5Wie integriert man Schema-Reviews in den PR-Prozess?
CI-Step mit graphql-inspector diff als Pflicht. Approval von Backend und Frontend. Schema-Snapshot als Diff-Baseline.
6Warum brauchen Magento-Teams einen Schema-Snapshot?
Das Gesamtschema entsteht erst beim Merge aller Module. Nur ein vollständiger Snapshot ermöglicht sinnvolle Diffs.
7Was ist ein Dangerous Change?
Bricht nicht sofort, kann aber unerwartetes Verhalten auslösen – z.B. geänderter Default-Wert oder neuer Enum-Wert.
8Wer sollte Schema-PRs approven?
Mindestens Backend- und Frontend-Entwickler. Bei Breaking Changes zusätzlich Tech Lead oder Architect.
9Kann man Naming Conventions automatisch prüfen?
Ja, mit Custom Rules in GraphQL Inspector oder eslint-plugin-graphql. Konfigurierbar und CI-fähig.
10Was tun, wenn ein Breaking Change unvermeidlich ist?
Dokumentieren, alle Konsumenten informieren, Migrationsfrist vereinbaren und über @deprecated ankündigen.

Checkliste für Schema-Reviews im Team

  • Sind alle neuen Felder und Typen mit @doc(description:...) dokumentiert?
  • Wurden bestehende Felder mit @deprecated(reason:...) markiert statt gelöscht?
  • Hat GraphQL Inspector im CI keine Breaking Changes gemeldet?
  • Folgen alle neuen Typen und Felder den vereinbarten Naming-Konventionen?
  • Sind Input-Types für neue Mutations als eigenständige Typen definiert (kein Inline-Missbrauch)?
  • Ist die Nullable-Strategie für neue Felder bewusst entschieden und dokumentiert?
  • Haben alle Custom Scalars eine klare Validierungsregel und Dokumentation?
  • Wurde die Auswirkung auf bestehende Clients (Frontend, Mobile, APIs) bewertet?

Ein konsequent durchgeführter Schema-Review-Prozess verhindert nicht nur Breaking Changes — er verbessert die API-Qualität nachhaltig und schafft Vertrauen zwischen Backend- und Frontend-Teams.