GraphQL ist eine Open-Source-Abfragesprache für APIs, die in einem API-Aufruf Daten aus mehreren Quellen abrufen kann. Es fungiert auch als serverseitige Laufzeit, um Abfragen mit vorhandenen Daten zu erfüllen. GraphQL priorisiert die Bereitstellung von nur den angeforderten Daten für den Client, stellt aber dennoch eine vollständige API-Datenbeschreibung bereit und erleichtert die Skalierung und Weiterentwicklung von APIs.

GraphQL verstehen

GraphQL wurde mit Blick auf Flexibilität, Geschwindigkeit und Entwickler entwickelt. Mit GraphQL können Entwickler APIs nach Belieben erstellen und dann eine GraphQL-Spezifikation verwenden, um sicherzustellen, dass die APIs für Clients funktionsfähig sind.

Eines der Hauptkonzepte einer GraphQL-Abfrage besteht darin, dass die Daten, die Sie zurückerhalten, vorhersehbar sind. Anstelle von Zeichenfolgen mit überflüssigem Code wird genau das zurückgegeben, was angefordert wurde. Dieser deklarative Datenabruf ist besonders auf Mobilgeräten nützlich, bei denen die Bandbreite begrenzt ist. Apps, die GraphQL verwenden, sind außerdem stabil und schnell, da sie und nicht der Server die angeforderten und empfangenen Daten steuern. Darüber hinaus sind sie auch bei langsamen Netzwerkverbindungen schnell, da eine einzelne Anfrage mehrere angeforderte Elemente gleichzeitig zurückgeben kann.

Aufbauend auf der Datenvereinfachung von GraphQL werden APIs nach Typen und Feldern statt nach Endpunkten organisiert. Das bedeutet, dass auf alle Daten über einen einzigen Endpunkt zugegriffen werden kann und Apps nur das anfordern können, was erforderlich ist. Durch die Reduzierung der betrieblichen Komplexität passt GraphQL in den Arbeitsablauf einer optimierten API-Konnektivitätslösung .

Eine kurze Geschichte

Im Jahr 2012 benötigte Meta (damals Facebook) eine API zum Abrufen von Daten, die leistungsstark genug für seine mobilen Facebook-Anwendungen war. Unter der Leitung von Lee Byron entwickelte Facebook GraphQL, um das Abrufen von Daten zu vereinfachen – insbesondere aus der Perspektive von Produktdesignern und Entwicklern. GraphQL wurde zuerst intern von Facebook verwendet und dann 2015 öffentlich freigegeben und als Open Source bereitgestellt. Dem Beispiel vieler anderer Open-Source-Projekte folgend, wechselte das GraphQL-Projekt 2019 zu seiner eigenen GraphQL Foundation , die von der Linux Foundation gehostet wird.

GraphQL wurde als Alternative zur REST -Architektur entwickelt. Standard-REST-APIs erfordern das Laden von Informationen von mehreren URLs über separate HTTP-GET-Anfragen. Mit GraphQL-APIs werden alle Daten über eine einzige POST-Anfrage abgerufen. Während sowohl REST als auch GraphQL Antworten im JSON-Format zurückgeben, konzentriert sich GraphQL auf die Rationalisierung und Konsolidierung von Daten.

Wie funktioniert GraphQL?

GraphQL unterstützt feinkörnige Datenanforderungen und gibt Clients mehr Kontrolle darüber, welche Informationen gesendet werden. Der Client sendet eine GraphQL-Abfrage in Form einer POST-Anfrage, auf die der Server eine Antwort im JSON-formatierten Format zurückgibt. GraphQL erfordert keine bestimmte Anwendungsarchitektur, kann in mehreren Umgebungen (einschließlich einer integrierten Entwicklungsumgebung [IDE]) bereitgestellt werden und kann mit vorhandenen API- Verwaltungstools oder zusätzlich zu vorhandenen REST-APIs verwendet werden.

Zu den Schlüsselbegriffen in GraphQL gehören:

  • Schema – Wird von API-Entwicklern erstellt, um zu zeigen, welche Daten Clients abfragen können. Schemas bestehen aus Objekttypen, die definieren, was ein Client anfordern kann, und den Feldern, die die Eigenschaften des Objekts darstellen.
  • Abfrage – Abfragen werden validiert und dann basierend auf dem Schema ausgeführt. GraphQL kann keine Abfrage ausführen, ohne einen Objekttyp zu definieren.
  • Resolver – An jedes Schemafeld angehängte Resolverfunktionen werden aufgerufen, um bei der API-Ausführung einen Wert zu erzeugen. Resolver sind entscheidende Architekturkomponenten von GraphQL.

Ein einzigartiges Merkmal von GraphQL besteht darin, dass die Antworten die Struktur der Abfrage widerspiegeln (die selbst durch das Schema definiert wird). Dies vereinfacht das Parsen für den Client, da das Format der Serverantwort vollständig vorhersehbar ist.

Design

Die hierarchische Natur von GraphQL folgt den Beziehungen zwischen Objekten und funktioniert gut in hierarchischen Benutzeroberflächen. Es ist außerdem stark typisiert, was bedeutet, dass jede Abfrageebene einem Typ entspricht. Diese Typen definieren dann eine Reihe von Feldern. Dies ähnelt SQL, wo vor Abschluss einer Abfrage beschreibende Fehlermeldungen angezeigt werden.

Resolver mit Datenquellen verbinden

Resolver sind die wichtigsten Architekturmodule, die GraphQL-Felder, Kanten, Mutationen, Abfragen und Abonnements mit Datenquellen (und Microservices) verbinden.

In diesem GraphQL-Tutorial erfahren Sie, wie Sie Resolver für AWS-Datenquellen erstellen.

Angeben, was abgerufen werden soll

Eine Sache, die GraphQL-Abfragen einzigartig macht, sind gespiegelte Antworten. Die von einer Abfrage zurückgegebenen Daten werden vorhersehbar, da Sie wissen, dass sie mit der Form aus der API-Anforderung übereinstimmen. Wenn die zurückgegebene Datenform der Clientabfrage folgt, werden Server vereinfacht.

Vorteile von GraphQL

Ein großer Vorteil von GraphQL besteht darin, dass Erweiterungen verfügbar sind, die Funktionen bereitstellen, die in REST nicht verfügbar sind. Zu den weiteren Vorteilen von GraphQL gehören die folgenden.

Legt eine einzige Quelle der Wahrheit fest

Ein GraphQL-Schema legt eine einzige Quelle der Wahrheit in GraphQL-Anwendungen fest und bietet einen zentralen Speicherort, an dem alle Daten beschrieben werden. Während das GraphQL-Schema im Allgemeinen auf dem Server definiert wird, können Clients weiterhin Daten basierend auf dem Schema abfragen und schreiben.

Kein Overfetching

In REST-Architekturen kann Overfetching schnell zum Problem werden: Die Anwendung (Backend) definiert die für jede Ressource verfügbaren Daten und gibt alle in ihrer Antwort zurück, selbst wenn der Client (Frontend) nur ein einziges Element benötigt.  GraphQL-Aufrufe erfolgen in einer einzigen Fahrt und liefern den Clients die angeforderten Daten ohne Überabruf.

Verbesserte Kommunikation zwischen Client und Server

Da die Datentypen stark definiert sind, ist die Kommunikation zwischen Client und Server in GraphQL klarer als in REST. Diese zugrunde liegende Struktur bedeutet auch, dass zum Aufrufen eines GraphQL-Servers keine komplexen Clients erforderlich sind. Um mehr zu erfahren und Code in Aktion zu sehen, lesen Sie über Clients und Server auf der offiziellen GraphQL-Seite .

Skalierbar mit Federation

API Federation ist eine Reihe von Designprinzipien und Tools, die es ermöglichen, Dienste innerhalb eines begrenzten Kontexts als konsistente API für Benutzer bereitzustellen und gleichzeitig die uneingeschränkte Weiterentwicklung von Diensten innerhalb dieses Kontexts zu ermöglichen. GraphQL bietet eine Methode, um die gesamte API zu föderieren und weiterzuentwickeln, ohne vorherige Abfragen zu unterbrechen, und ist somit skalierbar. Und diese Skalierbarkeit ist einer der Gründe, warum GraphQL von vielen Unternehmen verwendet wird.

Selbstbeobachtung

Die introspektive Natur von GraphQL ermöglicht das Abrufen des GraphQL-Schemas aus einer GraphQL-API. Clients können auch eine Liste der verfügbaren Datentypen anfordern, was ideal ist, um automatisch Dokumentationen zu generieren und Schemata aus mehreren Microservices zu testen oder abzurufen.

Nachteile von GraphQL

Obwohl es viele Gründe gibt, GraphQL einzuführen, gibt es auch einige Nachteile, die Sie kennen sollten. Beispielsweise ist nicht alles sofort einsatzbereit – es werden spezielle Bibliotheken benötigt, um die API anderer zu nutzen. Und insgesamt erfordert GraphQL eine umfassendere Tool-Unterstützung als REST.

Zu den Nachteilen von GraphQL im Vergleich zu REST gehören die folgenden.

Lernkurve

Für Entwickler, die an REST-APIs gewöhnt sind, ist die Lernkurve bei GraphQL steiler. Es kann auch den Arbeitsablauf ändern – API-Teams, die GraphQL verwenden, müssen auch wartbare GraphQL-Schemata schreiben. Wenn Sie jedoch neu anfangen, kann GraphQL leicht zu erlernen und zu verwenden sein, da Anfragen und Antworten dieselbe Struktur haben.

Einzigartige API-Management-Strategien

GraphQL erfordert möglicherweise neue API-Verwaltungsstrategien, während REST-APIs tendenziell in vorhandene API-Verwaltungsmodelle passen. Dies muss unbedingt berücksichtigt werden, da das Hinzufügen einer neuen API-Verwaltungsstrategie die Gesamtkosten erhöhen kann.

Komplexes Caching

Das Caching ist in GraphQL weniger unkompliziert als in REST, wo Anfragen normalerweise eine HTTP-Methode (GET, POST, PUT oder DELETE) verwenden. Eine Standard-GraphQL-Anfrage ist POST, die auf HTTP-Ebene nicht zwischengespeichert werden kann. Das Caching kann in GraphQL auch komplex werden, da ein einzelner Endpunkt bedeutet, dass die URL des Endpunkts mehrere unterschiedliche, nicht zwischenspeicherbare Antworten erzeugt (gut zum Abrufen von Daten, schlecht für das Caching). Serverentwickler erhalten dann unterschiedliche Abfragen, obwohl alle innerhalb desselben Objekts ausgeführt werden. Allerdings bieten viele GraphQL-Bibliotheken sofort einsatzbereite Caching-Mechanismen.