Schlüsselpunkte
- GraphQL ist eine Open-Source-Abfragesprache für APIs. Clients können darüber über einen einzigen Endpunkt genau die Daten anfordern, die sie benötigen.
- Eine GraphQL-API basiert auf Komponenten wie Schemas, Resolvern, Queries und Mutations. Sie legen fest, auf welche Daten zugegriffen werden kann, wie diese abgerufen werden und wie sie sich ändern lassen.
- GraphQL bündelt mehrere Datenquellen in einem Endpunkt, der auf strukturierte, vom Client definierte Abfragen antwortet.
- GraphQL eignet sich besonders für komplexe, flexible Datenumgebungen wie mobile Anwendungen, interne Dashboards und Kundenportale.
- Mit GraphQL kommen verschiedene Sicherheitsaspekte ins Spiel, etwa die Durchsetzung der Authentifizierung, die Begrenzung der Abfragetiefe, die Steuerung der Introspection und die Schema-Governance.
- Für Unternehmen mit einfachen, vorhersehbaren Ressourcenmustern oder begrenzten Kapazitäten in der IT-Governance kann REST die Anforderungen mit weniger operativem Aufwand erfüllen.
GraphQL ist eine Abfragesprache, mit der sich APIs aufbauen lassen, über die Anwendungen Daten aus Backend-Systemen anfordern können. Statt eine feste Antwort von einem vordefinierten Endpunkt zurückzugeben, lässt GraphQL den Client beschreiben, welche Daten er benötigt.
Diese Flexibilität kann unnötige Datenübertragungen verringern und API-Interaktionen vereinfachen. Eine perfekte Lösung ist GraphQL deshalb aber nicht, denn es bringt auch betriebliche Anforderungen mit sich. IT-Teams, Entwickler:innen und Automatisierungsteams sollten verstehen, wie GraphQL-Queries, -Schemas, -Mutations und -Resolver funktionieren, bevor sie GraphQL-APIs einführen oder betreuen.
Was ist GraphQL?
GraphQL ist eine quelloffene Abfragesprache und Laufzeitspezifikation für APIs. Clients können damit bestimmte Felder anfordern, die in einem Schema definiert sind. Eine GraphQL-API stellt in der Regel einen einzigen Endpunkt bereit, an den Clients strukturierte Abfragen senden. Die API holt die angeforderten Daten dann aus den darunterliegenden Systemen.
Typisch ist der Einsatz, wenn Anwendungen flexibel auf Daten zugreifen müssen oder Clients unterschiedliche Antwortstrukturen benötigen. Zu den Einsatzbereichen von GraphQL zählen unter anderem:
- Webanwendungen
- Mobile Anwendungen
- Interne Dashboards
- Kundenportale
- API-Aggregationsschichten
- Alle Systeme, die Daten aus mehreren Backend-Diensten zusammenführen
So funktioniert eine GraphQL-API
Eine GraphQL-API fungiert als Schnittstelle zwischen Clients und Backend-Systemen. Sie stellt in der Regel einen einzigen Endpunkt bereit, an den Clients ihre Abfragen senden. Die API ruft daraufhin Daten aus einer oder mehreren zugrunde liegenden Datenquellen ab, führt sie zusammen und liefert eine Antwort zurück.
Damit eine GraphQL-API funktioniert, braucht sie mehrere Kernkomponenten.
- Schema: Das Schema ist die Definition einer GraphQL-API. Es legt die verfügbaren Datentypen, Felder, Beziehungen sowie die Operationen (Queries und Mutations) fest, die Clients ausführen dürfen.
- Typsystem: Es definiert die Datentypen und Strukturen, die das GraphQL-Schema verwendet, und bestimmt damit, wie Daten innerhalb der API dargestellt und miteinander verknüpft werden.
- Query: Das ist die strukturierte Anfrage, die ein Client an eine GraphQL-API schickt, um Daten abzurufen. Die Query bildet dabei meist die Struktur der Antwort ab, die der Client erwartet.
- Resolver: Resolver sind die Datenlieferanten. Sie verbinden die im Schema definierten Daten mit den Daten in den Datenquellen, damit die API den korrekten Wert zurückgeben kann, den der Client angefordert hat.
- Mutation: Damit lassen sich Daten in den Datenquellen über die GraphQL-API verändern, also anlegen, aktualisieren oder löschen.
- Endpunkt: Das ist der API-Zugangspunkt, an dem Clients ihre GraphQL-Abfragen einreichen. Die GraphQL-API verarbeitet diese Abfragen und gibt das Ergebnis an den Client zurück.
Beim Einsatz einer GraphQL-API definieren Schema und Typsystem die verfügbaren Datenstrukturen und Operationen. Ein Client sendet eine Abfrage an den GraphQL-Endpunkt, und die Resolver rufen die angeforderten Daten ab oder erzeugen sie. Muss ein Client eine Operation ausführen, die den Anwendungszustand verändert, nutzt er eine Mutation, die von der GraphQL-API ausgeführt wird.
Die Aufgabe einer GraphQL-Query
Eine GraphQL-Query ist eine Nachricht des Clients, die der API genau mitteilt, was sie tun soll. Ein Beispiel: Eine mobile Anwendung benötigt den Benutzernamen, die E-Mail-Adresse und die zugewiesenen Geräte. Um diese Informationen zu erhalten, sendet sie eine Query, die all das in einer einzigen Nachricht anfordert. Werden nur Benutzername und E-Mail-Adresse gebraucht, enthält die Query auch nur diese Felder.
GraphQL-Queries können Over-Fetching verringern, weil Clients gezielt einzelne Felder anfordern. Ebenso lässt sich Under-Fetching reduzieren, da zusammengehörige Daten in einer einzigen Abfrage abgerufen werden können. Außerdem entfällt das clientseitige Filtern, das sonst durch zu weit gefasste API-Antworten nötig wird.
GraphQL im Vergleich
GraphQL vs. REST
Eine REST-API (Representational State Transfer) organisiert Ressourcen über mehrere Endpunkte hinweg, wobei jeder Endpunkt in der Regel eine vordefinierte Ressourcenstruktur bereitstellt. GraphQL stellt dagegen meist eine Abfrageschnittstelle bereit, über die Clients bestimmte Felder aus einer oder mehreren zugrunde liegenden Datenquellen anfordern können.
REST ist tendenziell stärker servergesteuert, GraphQL eher clientgesteuert. REST passt gut zu einfacheren und besser vorhersehbaren Zugriffsmustern, während GraphQL vor allem dann Vorteile bringt, wenn Clients flexibel auf zusammenhängende Daten zugreifen oder unterschiedliche Antwortstrukturen benötigen.
GraphQL vs. SQL
GraphQL und SQL werden gelegentlich verwechselt, weil es bei beiden um Abfragen geht. Tatsächlich sind es aber völlig unterschiedliche Dinge. SQL ist eine Abfragesprache für relationale Datenbanken und dient dazu, die Daten in einer Datenbank abzurufen, zu verändern und zu verwalten. GraphQL dagegen ist eine Abfragesprache für APIs. Es legt fest, wie Clients Daten von einer API-Schicht anfordern können, die mit einer SQL-Datenbank verbunden sein kann, es aber nicht zwingend ist.
GraphQL vs. Microsoft Graph API
Trotz der ähnlichen Namen haben GraphQL und die Microsoft Graph API nichts miteinander zu tun. GraphQL ist eine allgemeine Abfragesprache für APIs, während die Microsoft Graph API die einheitliche API von Microsoft ist, über die Benutzer:innen auf Daten aus Microsoft 365 und weiteren zugehörigen Cloud-Diensten zugreifen können.
Die Vorteile von GraphQL
GraphQL bringt zahlreiche Vorteile mit sich, darunter:
- Flexibler Datenabruf: Clients fordern nur die Daten an, die sie gerade benötigen.
- Weniger API-Roundtrips: Zusammengehörige Daten lassen sich häufig mit einer einzigen Abfrage abrufen, was die Zahl der nötigen API-Anfragen senken kann.
- Klare Schema-Struktur: Das Schema der API definiert eindeutig, welche Daten verfügbar sind.
- Mehr Freiheit im Frontend: Verschiedene Clients können je nach Bedarf unterschiedlich strukturierte Daten anfordern.
- Weiterentwicklung der API: Felder lassen sich ergänzen, ohne bei jeder Änderung einen neuen Endpunkt anlegen zu müssen.
- Unterstützung für Aggregation: Eine GraphQL-API kann eine einheitliche Schnittstelle für den Zugriff auf Daten aus mehreren Backend-Systemen bieten.
Grenzen und betriebliche Aspekte von GraphQL
GraphQL ist keine perfekte Lösung. Diese Grenzen und Punkte sollten Sie vor dem Einsatz berücksichtigen:
- Aus Sicherheitsgründen müssen Sie sicherstellen, dass Benutzer:innen und Systeme ordnungsgemäß verifiziert werden, bevor sie auf die API zugreifen.
- Bei flexiblen Abfragen brauchen Sie Schutzmechanismen, die verhindern, dass Benutzer:innen an Informationen gelangen, die nicht für sie bestimmt sind.
- Sie benötigen eine Möglichkeit, exzessives oder missbräuchliches Abfrageverhalten zu unterbinden, um die Daten Ihres Unternehmens zu schützen.
- GraphQL erfordert unter Umständen spezielle Caching-Strategien, die Sie sich vor der Implementierung aneignen müssen.
- Administrator:innen sollten Abfrage-Performance, Fehler, Latenz und Nutzungsmuster im Blick behalten.
- Bevor Sie Änderungen am API-Schema vornehmen, müssen Sie prüfen, dass diese Ihre Clients nicht beeinträchtigen und keine unnötigen Daten offenlegen.
- Sie brauchen Transparenz darüber, welche Abfragen ausgeführt werden und wie sie performen.
Diese Szenarien sprechen für GraphQL
GraphQL passt gut, wenn Ihre Clients unterschiedlich strukturierte Daten aus derselben API benötigen oder wenn Ihre Anwendungen häufig zusammengehörige Daten aus mehreren Quellen brauchen. Das gilt ebenso, wenn Ihre Backend-Daten aus mehreren Quellen stammen oder Sie die Payload-Größe reduzieren müssen. Letztlich verschafft GraphQL Clients Flexibilität, weil sie unterschiedliche Felder und Antwortstrukturen anfordern können, ohne dass für jeden Anwendungsfall die API geändert werden muss.
Eine perfekte Lösung ist es aber nicht. Wenn Sie mit vorhersehbaren Ressourcenmustern arbeiten, kann REST Ihre Anforderungen ebenso gut erfüllen. Bei kleineren Betrieben fehlt dem IT-Team womöglich die Kapazität, Schema-Governance und Abfragekontrollen dauerhaft zu betreuen. GraphQL ist für komplexe und flexible Abfragen gedacht. Brauchen Sie das nicht, fügt es Ihrem Betrieb womöglich nur eine unnötige Komplexitätsebene hinzu.
Datenabfragen mit GraphQL vereinfachen
GraphQL ist eine Abfragesprache für APIs. Sie verschafft Clients Flexibilität, weil sie unterschiedliche Felder und Antwortstrukturen anfordern können, ohne dass für jeden Anwendungsfall die API geändert werden muss.
Verwandte Artikel: