GraphQL

Was ist GraphQL?

GraphQL ist eine von Facebook (heute Meta) entwickelte Abfragesprache und Laufzeitumgebung für APIs. Im Gegensatz zu REST, wo der Server die Struktur der Antwort vorgibt, definiert bei GraphQL der Client, welche Daten er braucht. Eine einzige Abfrage kann Daten aus mehreren Quellen zusammenführen und in exakt der gewünschten Struktur zurückliefern.

GraphQL basiert auf einem typisierten Schema, das alle verfügbaren Daten und Operationen beschreibt. Dieses Schema dient gleichzeitig als Vertrag zwischen Client und Server und als automatisch generierte Dokumentation. Clients senden Queries (Leseoperationen) oder Mutations (Schreiboperationen) an einen einzigen Endpunkt -- statt wie bei REST an dutzende verschiedene URLs.

Warum ist das wichtig?

REST-APIs leiden unter zwei fundamentalen Problemen: Over-Fetching und Under-Fetching. Over-Fetching bedeutet, dass ein Endpunkt mehr Daten liefert als nötig -- etwa alle 30 Felder eines Nutzerprofils, wenn nur Name und Avatar benötigt werden. Under-Fetching bedeutet, dass ein Endpunkt zu wenige Daten liefert und der Client weitere Requests machen muss, um die fehlenden Informationen zusammenzutragen.

GraphQL eliminiert beide Probleme. Der Client gibt exakt an, welche Felder er braucht, und der Server liefert genau diese -- in einem einzigen Request. Das reduziert die übertragene Datenmenge, die Anzahl der Netzwerk-Requests und damit die Ladezeit der Anwendung. Besonders auf mobilen Geräten mit eingeschränkter Bandbreite ist dieser Vorteil spürbar.

Für Entwicklungsteams bietet das typisierte Schema einen weiteren Vorteil: Frontend und Backend können unabhängig voneinander arbeiten, solange sie sich an das Schema halten. Code-Generatoren können aus dem Schema automatisch TypeScript-Typen, Client-Bibliotheken und Validierungslogik erzeugen. Das eliminiert eine ganze Klasse von Fehlern -- Tippfehler in Feldnamen, falsche Datentypen, vergessene Pflichtfelder -- zur Compile-Zeit statt zur Laufzeit.

GraphQL in der Praxis

Die Implementierung einer GraphQL-API folgt einem klaren Muster:

Schema-Definition: Zuerst wird das Schema definiert, das alle verfügbaren Typen, Queries und Mutations beschreibt. Dieser API-First-Ansatz stellt sicher, dass die Schnittstelle durchdacht ist, bevor die Implementierung beginnt.

Resolver: Für jedes Feld im Schema wird ein Resolver implementiert -- eine Funktion, die die tatsächlichen Daten aus Datenbanken, externen APIs oder anderen Quellen lädt. Resolver können parallel ausgeführt und per DataLoader gebatcht werden, um das N+1-Problem zu vermeiden.

Client-Integration: Auf der Client-Seite ermöglichen Bibliotheken wie Apollo Client oder urql intelligentes Caching, automatische UI-Updates und optimistische Mutations. Der Client definiert seine Queries direkt neben den Komponenten, die die Daten verwenden.

Beispiel: Eine Projektmanagement-Plattform, gebaut mit Node.js, bietet eine GraphQL-API. Ein Dashboard-Widget zeigt eine Aufgabenliste an und braucht nur den Titel, den Status und den Namen des Zuständigen. Die GraphQL-Query holt exakt diese drei Felder. Ein anderes Widget zeigt Aufgabendetails mit Kommentaren, Anhängen und Aktivitätshistorie -- eine einzige Query liefert alle verschachtelten Daten in einem Request. Bei REST hätte der Client für dasselbe Ergebnis drei bis fünf separate API-Calls machen müssen.

GraphQL Federation: Für Microservices-Architekturen ermöglicht Federation das Zusammenführen mehrerer GraphQL-Schemas zu einem einheitlichen API-Gateway. Jeder Service definiert seinen Teil des Schemas, und der Gateway-Service kombiniert sie transparent für den Client.

Ein häufiger Fehler ist es, GraphQL als Ersatz für jede REST-API zu betrachten. Für einfache CRUD-Operationen, File-Uploads oder öffentliche APIs mit vielen verschiedenen Konsumenten kann REST die pragmatischere Wahl sein.

Verwandte Konzepte

Wir respektieren Ihre Privatsphäre

Diese Website verwendet Cookies für essentielle Funktionen und optional für Analyse und Marketing. Datenschutzerklärung