Definition

GraphQL

GraphQL ist eine Abfragesprache, die beschreibt, wie ein Client Informationen über eine Programmierschnittstelle (API) abfragen soll. Im weitesten Sinne handelt es sich bei GraphQL um eine Syntax, mit der Entwickler bestimmte Daten abfragen und diese Daten aus verschiedenen Quellen zurückgeben können. Sobald der Client die Struktur der benötigten Daten definiert, wird genau dieselbe Datenstruktur vom Server zurückgegeben.

Durch die Open-Source-Funktionen von GraphQL zum Lesen, Ändern und Überwachen von Daten können diese in Echtzeit aktualisiert werden. GraphQL-Server wurden für die Verwendung mit gängigen Programmiersprachen wie JavaScript, Python, Ruby, C#, Go und PHP entwickelt. Das Ziel von GraphQL ist es, Entwicklern einen umfassenden Überblick über die in einer API gespeicherten Daten zu geben, die Möglichkeit, nur relevante Daten zu empfangen und eine Architektur, die die Skalierung und Anpassung von APIs im Laufe der Zeit erleichtert.

Um APIs mit GraphQL zu erstellen, sind ein GraphQL-Server, der die API hostet, und ein Client, der eine Verbindung zu einem Endpunkt herstellt, erforderlich. GraphQL-APIs bestehen aus drei Merkmalen: dem Schema, den Abfragen und den Resolvern:

  1. Schema: Ist das Typsystem, das zur Definition einer API innerhalb einer Serverimplementierung verwendet wird. Alle Fähigkeiten und Funktionalitäten werden im Schema definiert.
  2. Abfrage: Die Anfrage oder Anweisung zur Ausgabe, die gestellt wird. Neue Abfragen werden mit einem Schlüsselwort deklariert und können verschachtelte Felder, Arrays und Argumente unterstützen.
  3. Resolver: Dieser teilt GraphQL mit, wie und wo Daten in Bezug auf die angegebenen Felder gefunden werden können. Ohne diesen Resolver wüsste der GraphQL-Server nicht, wie er eine Abfrage behandeln soll.

GraphQL unterstützt bei der Erstellung flexibler APIs, die an sich ändernde Anforderungen angepasst werden können, und sorgt für Einheitlichkeit bei allen Anwendungen. Wenn Anwendungen angepasst werden müssen, um neue Funktionen hinzuzufügen oder ungenutzte zu entfernen, können die entsprechenden Felder in der Abfrage einfach angepasst und mit minimalem Aufwand und ohne Unterbrechung ausgeführt werden.

GraphQL
Abbildung 1: Schritte einer GraphQL-Abfrage.

Vorteile von GraphQL sind:

  • Organisiert den Code hierarchisch, um die Komplexität zu reduzieren und Beziehungen zwischen Objekten anzuzeigen.
  • Verfügt über stark typisierte Felder, die Entwickler vor der Ausführung einer Abfrage auf Fehlermeldungen hinweisen.
  • Liefert vorhersehbare Ergebnisse aus komplexen Abfragen.
  • Gibt nur relevante, gewünschte Daten aus.
  • Ermöglicht eine schnellere und stabilere Ausführung von Anwendungen.
  • Nutzt vorhandenen Code und Datenquellen und eliminiert so redundante Arbeit.
  • Ist versionsfrei, um Weiterentwicklungen und zukünftige Änderungen zu unterstützen.

GraphQL versus REST

Facebook entwickelte GraphQL, um die Endpunkte von REST zu vereinfachen. Anstatt mehrere Endpunkte mit kleinen Mengen unzusammenhängender Daten zu haben, hat GraphQL einen einzigen Endpunkt, der komplexe Abfragen eingibt und nur relevante Informationen ausgibt.

Mit einer Metapher ausgedrückt: REST führt APIs wie eine sequentielle Aufgabenliste aus. Zuerst werden Besorgungen gemacht, dann die Post abgeholt und dann ein Termin beim Zahnarzt vereinbart – alle Komponenten sind getrennt. Bei GraphQL gibt es vor der Erledigung der Aufgaben einen zusätzlichen Schritt, in dem das gewünschte Ergebnis angefordert wird (in diesem Fall ist das gewünschte Ergebnis, dass die Besorgungen erledigt, die Post abgeholt und der Termin vereinbart wird). Dann tritt GraphQL auf den Plan und erledigt alle Aufgaben gleichzeitig und liefert nur das Ergebnis zurück, ähnlich wie ein persönlicher Assistent.

REST ist zum Standardwerkzeug für die Entwicklung von Web-APIs geworden, hat sich aber als zu unflexibel erwiesen, um mit schnellen Aktualisierungen Schritt zu halten, und ist anfällig für Probleme mit zu vielen oder zu wenigen Abrufen. GraphQL bietet eine Lösung für diese Unzulänglichkeiten und eine einfachere, benutzerfreundliche Schnittstelle.

Diese Definition wurde zuletzt im Juli 2022 aktualisiert

Erfahren Sie mehr über Softwareentwicklung