GraphQL ist eine Open-Source-Abfragesprache für APIs, mit der Daten aus mehreren Quellen in einem einzigen API-Aufruf abgerufen werden können. GraphQL fungiert auch als serverseitige Laufzeitumgebung, um Abfragen mit vorhandenen Daten auszuführen. GraphQL stellt dem Client vorrangig nur die angeforderten Daten zur Verfügung, bietet aber dennoch eine vollständige Beschreibung der API-Daten und erleichtert die Skalierung und Weiterentwicklung von APIs.
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 funktional sind.
Eines der wichtigsten Konzepte einer GraphQL-Abfrage ist, dass die Daten, die Sie zurückerhalten, vorhersehbar sind. Anstelle von Zeichenfolgen mit überflüssigem Code wird genau das zurückgegeben, was angefordert wurde. Diese deklarative Datenabfrage ist besonders auf mobilen Geräten nützlich, wo die Bandbreite begrenzt ist. Anwendungen, die GraphQL verwenden, sind außerdem stabil und schnell, weil sie die angeforderten und empfangenen Daten selbst kontrollieren und nicht der Server. Sie sind auch bei langsamen Netzwerkverbindungen schnell, weil eine einzige Anforderung mehrere angeforderte Elemente auf einmal zurückgeben kann.
Aufbauend auf der Datenvereinfachung von GraphQL werden APIs nach Typen und Feldern anstatt nach Endpunkten organisiert. Das bedeutet, dass auf alle Daten an einem einzigen Endpunkt zugegriffen werden kann, sodass Anwendungen nur das Notwendige abfragen können. Durch die Verringerung der betrieblichen Komplexität fügt sich GraphQL in den Arbeitsablauf einer rationalisierten API-Konnektivitätslösung ein.
Im Jahr 2012 benötigte Meta (damals Facebook) eine Datenabruf-API, die für mobile Facebook-Anwendungen leistungsfähig genug war. Unter der Leitung von Lee Byron entwickelte Facebook GraphQL, um den Datenabruf zu vereinfachen – insbesondere aus der Sicht von Produktdesignern und -entwicklern. GraphQL wurde zunächst intern von Facebook verwendet, dann 2015 öffentlich freigegeben und als Open Source verfügbar gemacht. Wie viele andere Open-Source-Projekte wurde das GraphQL-Projekt 2019 in eine eigene GraphQL Foundation verlagert, die von der Linux Foundation betrieben wird.
GraphQL wurde als Alternative zur REST-Architektur entwickelt. Standard-REST-APIs erfordern das Laden von Informationen von mehreren URLs über separate HTTP-GET-Anforderungen. Bei GraphQL-APIs werden alle Daten über eine einzige POST-Anforderung abgerufen. Während sowohl REST als auch GraphQL JSON-formatierte Antworten zurückgeben, konzentriert sich GraphQL auf die Rationalisierung und Konsolidierung von Daten.
GraphQL unterstützt die Anforderung abgestimmter Daten und gibt den Clients mehr Kontrolle darüber, welche Informationen gesendet werden. Der Client sendet eine GraphQL-Anforderung in Form einer POST-Anforderung, auf die der Server eine JSON-formatierte Antwort zurücksendet. GraphQL erfordert keine spezielle Anwendungsarchitektur, kann in verschiedenen Umgebungen eingesetzt werden (einschließlich einer integrierten Entwicklungsumgebung [IDE]) und kann mit bestehenden API-Verwaltungstools oder zusätzlich zu bestehenden REST-APIs verwendet werden.
Einige Schlüsselbegriffe innerhalb von GraphQL sind:
Ein einzigartiges Merkmal von GraphQL ist, dass die Antworten die Struktur der Abfrage widerspiegeln (die ihrerseits durch das Schema definiert ist). Dies vereinfacht das Parsing für den Client, da das Format der Serverantwort vollständig vorhersehbar ist.
Die hierarchische Natur von GraphQL folgt den Beziehungen zwischen den Objekten und funktioniert gut in hierarchischen Benutzeroberflächen. Es ist auch stark typisiert, was bedeutet, dass jede Abfrageebene einem Typ entspricht. Diese Typen definieren dann eine Reihe von Feldern. Dies ist ähnlich wie bei SQL, wo beschreibende Fehlermeldungen angezeigt werden, bevor eine Abfrage abgeschlossen wird.
Resolver sind die wichtigsten Architekturmodule, die GraphQL-Felder, Netzwerkränder, Mutationen, Abfragen und Abonnements mit Datenquellen (und Microservices) verbinden.
In diesem GraphQL-Tutorial erfahren Sie, wie Sie Resolver für AWS-Datenquellen erstellen können.
Eine Sache, die GraphQL-Abfragen einzigartig macht, sind gespiegelte Antworten. Daten, die von einer Abfrage zurückgegeben werden, werden vorhersehbar, weil man weiß, dass sie mit der Form der API-Anforderung übereinstimmen. Wenn die Form der zurückgegebenen Daten der Client-Abfrage folgt, werden Server vereinfacht.
Ein großer Vorteil von GraphQL ist, dass es Erweiterungen gibt, die Funktionen bieten, die in REST nicht verfügbar sind. Zu den weiteren Vorteilen von GraphQL gehören die folgenden.
Ein GraphQL-Schema legt einen „Single Source of Truth“ in GraphQL-Anwendungen fest und bietet einen zentralen Ort, an dem alle Daten beschrieben werden. Während das GraphQL-Schema im Allgemeinen auf dem Server definiert wird, können Clients dennoch Daten auf der Grundlage des Schemas abfragen und schreiben.
In REST-Architekturen kann Overfetching schnell zu einem Problem werden: Die Anwendung (Backend) definiert die für jede Ressource verfügbaren Daten und gibt sie in ihrer Antwort vollständig zurück, auch wenn der Client (Frontend) nur ein einziges Element benötigt. GraphQL-Aufrufe erfolgen in einem einzigen Trip und liefern den Clients die angeforderten Daten ohne Overfetching.
Da die Datentypen fest definiert sind, ist die Kommunikation zwischen Client und Server in GraphQL klarer als in REST. Diese zugrundeliegende Struktur bedeutet auch, dass keine komplexen Clients benötigt werden, um einen GraphQL-Server aufzurufen. Um mehr zu erfahren und um Code in Aktion zu sehen, lesen Sie über Clients und Server auf der offiziellen Seite von GraphQL.
API-Verbund ist eine Reihe von Designprinzipien und -Tools, die es ermöglichen, Dienste innerhalb eines begrenzten Kontexts als konsistente API für die Benutzer darzustellen und gleichzeitig zuzulassen, dass sich die Dienste innerhalb dieses Kontexts ohne Einschränkungen weiterentwickeln. GraphQL bietet eine Methode, um die gesamte API zu vereinen und weiterzuentwickeln, ohne frühere Abfragen zu unterbrechen, was dann skalierbar ist – und diese Skalierbarkeit ist ein Grund, warum GraphQL von vielen Unternehmen verwendet wird.
Der introspektive Charakter von GraphQL ermöglicht es, das GraphQL-Schema von einer GraphQL-API abzurufen. Clients können auch eine Liste der verfügbaren Datentypen anfordern, was sich ideal für die automatische Erstellung der Dokumentation und für das Testen oder Abrufen von Schemata von mehreren Microservices eignet.
Es gibt zwar viele Gründe, GraphQL zu übernehmen, aber es gibt auch einige Nachteile, die man beachten sollte. Zum Beispiel ist nicht alles sofort einsatzbereit – es werden spezielle Bibliotheken benötigt, um die API eines anderen Anbieters zu nutzen. Und insgesamt erfordert GraphQL eine umfangreichere Tool-Unterstützung als REST.
Zu den Nachteilen von GraphQL im Vergleich zu REST gehören die folgenden.
Für Entwickler, die an REST-APIs gewöhnt sind, ist GraphQL mit einer steileren Lernkurve verbunden. Es kann auch den Arbeitsablauf verändern – API-Teams, die GraphQL verwenden, müssen auch wartbare GraphQL-Schemata schreiben. Wenn Sie Ersteinsteiger sind, kann GraphQL leicht zu erlernen und zu verwenden sein, da Anforderungen und Antworten dieselbe Struktur haben.
GraphQL erfordert möglicherweise neue API-Verwaltungsstrategien, während REST-APIs sich in der Regel in bestehende API-Verwaltungsmodelle einfügen. Dies ist wichtig zu berücksichtigen, da das Hinzufügen einer neuen API-Verwaltungsstrategie die Gesamtkosten erhöhen kann.
Caching ist in GraphQL weniger unkompliziert als in REST, wo Anforderungen in der Regel eine HTTP-Methode (GET, POST, PUT oder DELETE) verwenden. Eine Standard-GraphQL-Anforderung ist POST, die auf HTTP-Ebene nicht Cache-fähig ist. Caching kann in GraphQL auch komplex werden, weil ein einziger Endpunkt bedeutet, dass die URL dieses Endpunkts mehrere unterschiedliche, nicht Cache-fähig Antworten erzeugt (gut für das Abrufen von Daten, schlecht für das Caching). Server-Entwickler haben dann unterschiedliche Abfragen, obwohl sie alle innerhalb desselben Objekts ausgeführt werden. Abgesehen davon bieten viele GraphQL-Bibliotheken von Haus aus Caching-Mechanismen.