Kurz erklärt
GraphQL ist eine von Facebook (heute Meta) entwickelte und 2015 öffentlich freigegebene Abfragesprache für APIs samt zugehöriger Laufzeitumgebung. Die Grundidee: Statt für jede Datenansicht einen eigenen Endpunkt zu bauen, stellst du einen einzigen Endpunkt bereit, über den der Client präzise beschreibt, welche Felder er braucht — nicht mehr und nicht weniger.
Der Server liefert exakt diese Struktur zurück. Für dich als Entscheider heißt das: weniger Roundtrips, schlankere Antworten und Frontend-Teams, die neue Ansichten bauen können, ohne auf jede Backend-Anpassung zu warten. Gerade bei datenintensiven Oberflächen wie Dashboards, Produktkonfiguratoren oder Mobile Apps kann das den Unterschied zwischen träge und flüssig ausmachen.
Das Kernprinzip: Der Client bestimmt die Datenform
Bei einer klassischen REST-API definiert der Server, welche Daten ein Endpunkt zurückliefert. Will das Frontend nur den Namen und das Bild eines Produkts, bekommt es trotzdem das komplette Produktobjekt mit fünfzig Feldern — das klassische Over-Fetching. Braucht es zusätzlich noch die Bewertungen, muss es einen zweiten Endpunkt aufrufen — Under-Fetching, das zu mehreren Roundtrips führt. GraphQL dreht das um: Der Client schickt eine Query, die exakt die gewünschte Datenform beschreibt, und der Server füllt sie. Eine einzige Anfrage kann verschachtelte, zusammenhängende Daten über mehrere Entitäten hinweg liefern — etwa ein Produkt mit seinen Varianten, Bewertungen und dem Hersteller in einem Rutsch.
Das Herzstück jeder GraphQL-API ist das Schema. Es definiert in einer typisierten Sprache (Schema Definition Language, SDL), welche Typen, Felder und Beziehungen es gibt. Das Schema ist gleichzeitig Vertrag, Dokumentation und Validierungsschicht: Eine Query, die ein nicht existierendes Feld anfordert, wird abgelehnt, bevor sie überhaupt ausgeführt wird. Diese starke Typisierung ist einer der größten Vorteile von GraphQL gegenüber lose dokumentierten REST-Schnittstellen.
Ein konkretes Beispiel macht das greifbar: Eine Query wie { produkt(id: "4711") { name preis bewertungen { sterne text } } } liefert genau diese Struktur zurück — Name, Preis und eine Liste von Bewertungen mit Sternen und Text, alles in einer einzigen Antwort. Will ein anderes Frontend zusätzlich noch den Hersteller, ergänzt es einfach das Feld in seiner Query, ohne dass am Backend etwas geändert werden muss. Genau diese Entkopplung zwischen Datenbedarf und Endpunkt-Design ist der praktische Kern von GraphQL und der Grund, warum Frontend-Teams damit deutlich autonomer arbeiten können. Im Alltag bedeutet das kürzere Abstimmungsschleifen zwischen Frontend und Backend und schnellere Iterationen an der Oberfläche.
Die drei Operationstypen
- Query — liest Daten, ohne sie zu verändern (das Gegenstück zu GET bei REST).
- Mutation — verändert Daten: anlegen, aktualisieren, löschen (entspricht POST, PUT, PATCH, DELETE).
- Subscription — hält eine Verbindung offen und pusht Änderungen in Echtzeit an den Client, typischerweise über WebSockets. Ideal für Live-Tickers, Chat oder Lagerbestands-Updates.
Alle drei laufen über einen einzigen HTTP-Endpunkt, meist /graphql. Das unterscheidet GraphQL fundamental von REST, wo jede Ressource ihre eigene URL hat.
Diese Bündelung auf einen Endpunkt hat einen praktischen Nebeneffekt: Die gesamte API ist über das Schema introspektierbar. Werkzeuge wie der GraphiQL- oder Apollo-Sandbox-Explorer zeigen dir live alle verfügbaren Typen, Felder und Argumente an und erlauben es, Queries interaktiv zu bauen und auszuprobieren. Für Entwickler ist das ein enormer Produktivitätsgewinn gegenüber dem Durchforsten statischer REST-Dokumentation, und für die Einarbeitung neuer Teammitglieder verkürzt es die Lernkurve spürbar.