Es kann schwierig sein, die Technologien auszuwählen, die in den Tech-Stack deines nächsten Projekts aufgenommen werden sollen. In vielen Fällen – und vor allem, wenn es um die Wahl zwischen GraphQL und RESTful APIs geht – geht es darum, die nächstbeste API-Designarchitektur zu wählen.
Es gibt vier wichtige Möglichkeiten, APIs zu entwickeln: SOAP, GRPC, REST und GraphQL. Wir beschränken uns oft auf REST und GraphQL, wenn wir APIs bauen wollen. Das liegt daran, dass REST die traditionellen Wege der API-Erstellung mit SOAP und GRPC verändert hat.
GraphQL wird weithin als das bessere REST bezeichnet, weil es eine bessere Art und Weise darstellt, APIs zu erstellen. Viele Entwickler glauben, dass GraphQL REST ersetzen wird. Viele andere haben bereits entdeckt, dass GraphQL dabei hilft, einige häufige Herausforderungen zu lösen, denen Entwickler bei der Erstellung von REST-APIs gegenüberstehen.
Diese beiden Methoden zum Aufbau von APIs sind völlig unterschiedlich. In der Praxis funktionieren diese Technologien so, dass eine HTTP-Anfrage gesendet und das Ergebnis empfangen wird. Beide haben ihre Vor- und Nachteile, und in diesem Artikel werden wir diese beiden großartigen Technologien, die die Art und Weise, wie wir APIs entwickeln und skalieren, verändert haben, ausführlich besprechen.
Bevor wir jedoch in die Details eintauchen, wollen wir zunächst die Bedeutung von GraphQL und RESTful APIs erkunden.
Was ist GraphQL?
GraphQL ist eine API-Abfragesprache und eine Laufzeitumgebung, um diese Abfragen mit vorhandenen Daten zu beantworten. Sie ist mit leistungsstarken Tools ausgestattet, die selbst die komplexesten Abfragen bewältigen.
Das zentrale Merkmal von GraphQL ist die Fähigkeit, nur die angeforderten Daten abzufragen und zu empfangen – mehr nicht. Das macht es viel einfacher, deine APIs zusammen mit deiner App zu skalieren.
Das Spannendste an GraphQL ist die Fähigkeit, dir alle Daten in einem Endpunkt zur Verfügung zu stellen.
Das obige Diagramm ist eine typische Darstellung der GraphQL-Architektur. Kunden stellen Anfragen von verschiedenen Geräten aus, und GraphQL bearbeitet ihre Anfragen und gibt nur die angeforderten Daten zurück. Damit wird das Problem des Over- und Underfetching in RESTful-APIs auf elegante Weise gelöst.
Im obigen Beispiel ist ein GraphQL-Playground dargestellt, in dem mit einem einzigen Endpunkt Daten abgefragt werden können. Oben ist der API-Endpunkt, links die Abfrage, die die Namen der Kontinente abfragt, und rechts schließlich die Antwort auf die Abfrage, die wir gestellt haben.
GraphQL wurde von Facebook entwickelt, um den Entwicklern von mobilen Apps bei der Arbeit mit REST-APIs zu helfen. Seit der Veröffentlichung der ersten Open-Source-Version im Jahr 2015 hat GraphQL ein enormes Wachstum erfahren, da die Technologie von den großen Unternehmen der Tech-Branche übernommen wurde.
Unternehmen, die GraphQL nutzen
Im Folgenden findest du eine Liste mit einigen Unternehmen und Anwendungen, die GraphQL aktiv auf ihren Servern nutzen.
Facebook hat GraphQL entwickelt und nutzt es seit 2012 in der Produktion, um seine mobilen Anwendungen zu betreiben. Das milliardenschwere soziale Netzwerk hat die GraphQL-Spezifikationen im Jahr 2015 veröffentlicht und sie damit für viele Umgebungen und Teams jeder Größe zugänglich gemacht.
GitHub
Auch GitHub kündigt die Nutzung von GraphQL an, indem es eine GraphQL-API bereitstellt, mit der du Integrationen erstellen, Daten abrufen und deine Arbeitsabläufe automatisieren kannst. Die GitHub GraphQL API bietet präzisere und flexiblere Abfragen als die GitHub REST API.
Pinterest ist auch ein früher Anwender von GraphQL. Der Foto-Sharing-Gigant hat öffentlich darüber gesprochen, wie früh er GraphQL erforscht hat und wie er die GraphQL-Technologie nutzt, die sein Milliarden-Dollar-Unternehmen antreibt.
Viele andere milliardenschwere Unternehmen wie Intuit, Shopify, Coursera und Airbnb betreiben ihre Anwendungen mit GraphQL. Und diese weit verbreitete Vorliebe für REST wird immer größer.
Was ist eine RESTful API?
REST steht für „Representational State Transfer“ und ist ein Software-Architekturstil für verteilte Hypermedia-Systeme. Er definiert Prinzipien und Einschränkungen für den Austausch von Ressourcen zwischen dem Server und den Clients.
Wenn diese Prinzipien in einer API befolgt werden, wird die Anwendung der API als „RESTful“ bezeichnet Die WordPress REST-API ist ein Paradebeispiel dafür.
Im Folgenden findest du einige der Grundsätze und Einschränkungen, die eine API erfüllen muss, um als „Restful API“ bezeichnet zu werden:
- Client-Server Entkopplung: Die Clients (Frontend) und der Server (Backend) sind vollständig voneinander getrennt und können nur über die Endpunkte kommunizieren.
- Einheitliche Schnittstelle: Die Daten, die auf der Schnittstelle angezeigt werden, sind auf allen Geräten identisch.
- Zustandslosigkeit: Der Server merkt sich nicht, ob die aktuelle Anfrage zum ersten Mal gestellt wird oder nicht. Jedes Mal, wenn eine Anfrage gestellt wird, muss sie alle notwendigen Informationen enthalten, um sie von Grund auf zu bearbeiten.
- Cachefähigkeit: Caching und Sitzungsspeicherung sind erlaubt, aber sie müssen so konfiguriert sein, dass die Endnutzer/innen das Caching von Daten ablehnen können.
- Mehrschichtige Systemarchitektur: Die APIs müssen so gestaltet sein, dass weder der Client noch der Server erkennen können, ob sie direkt oder über einen Vermittler kommunizieren.
Das folgende Diagramm zeigt die grundlegende REST-Architektur. Es zeigt, wie Anfragen und Antworten normalerweise verarbeitet werden.
Vorteile von GraphQL
Im Folgenden sind einige Vorteile von GraphQL aufgeführt, die zeigen, warum es für die Entwicklung der nächsten Milliarden-Dollar-App mehr als ausreichend ist.
Abruf von Daten über einen einzigen API-Endpunkt
Der größte Vorteil von GraphQL ist die Möglichkeit, über einen einzigen API-Endpunkt auf beliebige oder alle Datenpunkte zuzugreifen.
Eines der häufigsten Probleme bei RESTful-APIs ist, dass es zu viele Endpunkte für den Zugriff auf Informationen gibt. Bei GraphQL hast du nur einen einzigen Endpunkt, sodass du nicht mehrere Anfragen senden musst, um verschiedene Informationen über ein Objekt abzurufen.
Das folgende Diagramm zeigt ein anschauliches Beispiel für den Abruf von Ressourcen mit RESTful API und GraphQL. Du kannst sehen, dass es nur einen Endpunkt gibt, um auf die Ressource im GraphQL-Server zuzugreifen, während bei der RESTful-API mehrere API-Endpunkte benötigt werden, um auf verschiedene Ressourcen zuzugreifen.
Kein Over- oder Underfetching
Das Problem des Over- oder Underfetching ist ein bekanntes Problem bei RESTful-APIs. Das ist der Fall, wenn Kunden Daten herunterladen, indem sie auf Endpunkte treffen, die feste Datenstrukturen zurückgeben, oder wenn sie entweder mehr oder weniger abrufen, als sie erwartet haben.
Übermäßiges Abrufen führt dazu, dass die Anfrage mehr Daten erhält – oder „abruft“ – als für eine bestimmte Anfrage erforderlich ist. Stell dir vor, du rufst alle Nutzer in einer Tabelle ab, um ihre Nutzernamen auf deiner Homepage anzuzeigen. In diesem Fall liefert das Overfetching alle Daten zu jedem Benutzer, einschließlich (aber nicht nur) des Namens.
Under-Fetching ist vergleichsweise selten, kommt aber vor, wenn der betreffende Endpunkt nicht alle angeforderten Informationen liefern kann. Der Kunde muss dann weitere Anfragen stellen, um die anderen Informationen abzurufen.
GraphQL löst das Problem des Over- oder Underfetching effizient, indem es genau die Ressource abruft, die der Kunde angefordert hat, ohne zusätzliche Details.
Bessere Handhabung komplexer Systeme und Microservices
GraphQL kann die Komplexität mehrerer integrierter Systeme vereinheitlichen und verbergen.
Nehmen wir zum Beispiel an, wir wollen von einer monolithischen Backend-Anwendung zu einer Microservice-Architektur migrieren. Die GraphQL-API hilft bei der Kommunikation zwischen verschiedenen Microservices, indem sie diese in einem GraphQL-Schema zusammenfasst.
Sobald diese Schemas definiert sind, können sowohl das Frontend als auch das Backend getrennt voneinander kommunizieren, ohne dass weitere Änderungen vorgenommen werden müssen, da das Frontend weiß, dass die Daten im Schema im gesamten System immer synchronisiert sein werden.
Schnell und sicher
Das Problem des Overfetching kann zu einem höheren Bandbreitenverbrauch für die Clients führen, was mit der Zeit zu Verzögerungen in deiner Anwendung führen kann. Bei der Verwendung von RESTful-API-Designmustern ist es zeitaufwändiger, die benötigten Informationen aus einer riesigen Nutzlast herauszufiltern.
Durch die Fähigkeit von GraphQL, Overfetching und Underfetching zu vermeiden, liefert der Server eine sichere, leicht lesbare und vorhersehbare Form, die deine API-Anfragen und -Antworten schneller macht.
Vorteile von REST
Trotz der wachsenden Beliebtheit von GraphQL ist REST immer noch einer der beliebtesten API-Standards. Sehen wir uns einmal an, warum.
- Lernkurve: RESTful-APIs sind am einfachsten zu erlernen und zu verstehen. Das ist ihr Hauptvorteil gegenüber anderen APIs.
- Serialisierung: REST verfügt über einen flexiblen Ansatz und Formate für die Serialisierung von Daten in JSON.
- Caching: REST-API kann mit Hilfe eines HTTP-Proxy-Servers und eines Caches eine hohe Last bewältigen.
- Komplexe Anfragen: REST-APIs haben einen separaten Endpunkt für verschiedene Anfragen, was dazu beiträgt, dass komplexe Anfragen besser zu bewältigen sind als bei anderen APIs
- Sauber und einfach: REST-APIs sind elegant, einfach und übersichtlich. Sie sind einfach zu erkunden.
- Standard-HTTP-Prozeduren: REST verwendet Standard-HTTP-Prozeduren, um Daten abzurufen und Anfragen zu stellen.
- Client/Server: Das bedeutet, dass die Geschäftslogik von der Präsentation entkoppelt ist. Du kannst also das eine ändern, ohne das andere zu beeinflussen.
- REST ist zustandslos: Alle Nachrichten, die zwischen Client und Server ausgetauscht werden, enthalten den gesamten Kontext, der benötigt wird, um zu wissen, was mit der Nachricht geschehen soll.
Nachteile von GraphQL
Nachdem wir nun die Vorteile von GraphQL gegenüber REST erörtert haben, wollen wir uns nun mit den Nachteilen von GraphQL beschäftigen:
- Schwierige Lernkurve: GraphQL ist nicht so einfach zu erlernen wie REST. Der schwierigste Teil beim Aufbau einer GraphQL-API ist die Erstellung des Schemas. Das erfordert viel Zeit und Fachwissen.
- Datei-Upload: GraphQL verfügt nicht über eine native Datei-Upload-Funktion. Dies kann mit Base64-Kodierung umgangen werden, aber die Kosten für die Kodierung und Dekodierung können zeitaufwändig und teuer sein.
- Web Caching: Caching hilft, den häufigen Datenverkehr zum Server zu reduzieren, was die Anfragen und den Antwortprozess beschleunigt, da häufig abgerufene Informationen in der Umgebung des Servers bleiben. GraphQL unterstützt keine HTTP-Caching-Methoden und verlässt sich stattdessen auf die Caching-Mechanismen der Apollo oder Relay Clients.
- Ungeeignet für kleine Anwendungen: GraphQL ist möglicherweise nicht die beste API-Architektur für die Entwicklung einer kleinen Anwendung. Wenn deine Anwendung die flexibleren Abfragen von GraphQL nicht benötigt, ist REST die richtige Wahl.
- Komplexe Abfrageproblematik: Die Fähigkeit von GraphQL, einem Kunden genau das zu geben, was er will, kann auch zu Problemen bei der Weitergabe von Abfragen führen. Wenn ein Kunde zu viele verschachtelte Abfragen stellt, kann das dazu führen, dass die falschen Abfragen gesendet werden, was für den Server sehr zeitaufwändig sein kann. Es ist besser, REST mit benutzerdefinierten Endpunkten zu verwenden, um solche Anfragen zu erfüllen.
Die Nachteile von REST
Wenden wir uns nun den Nachteilen von REST zu:
- Mehrere Roundtrips: Das größte Problem bei REST-APIs sind die zahlreichen Endpunkte. Das bedeutet, dass der Client, um alle Ressourcen für eine komplette Anwendung zu erhalten, unzählige Roundtrips machen muss, um die Daten zu bekommen.
- Over- und Underfetching: Das Problem mit Over- und Under-fetching ist ein großer Nachteil von RESTful APIS. Es kann zu Verzögerungen bei den Antworten führen, weil große, unerwünschte Nutzdaten abgerufen werden.
- Hierarchie: Da REST-APIs auf URIs basieren, die Ressourcen referenzieren, eignen sie sich schlecht für Ressourcen, die nicht von Natur aus in einer einfachen Hierarchie organisiert oder zugänglich sind.
Warum GraphQL statt REST verwenden?
Im Folgenden werden wir erörtern, warum du für deine zukünftige API-Entwicklung GraphQL anstelle von RESTful API in Betracht ziehen solltest.
Stark typisiertes Schema
GraphQL verwendet ein starkes Typensystem, um die Fähigkeiten der API zu definieren. In GraphQL wird die Schemadefinitionssprache (SDL) verwendet, um die Parameter für den Zugriff des Clients auf die Daten des Servers zu definieren. Alle APIs, die dem Kunden zur Verfügung gestellt werden, sind in SDL niedergeschrieben, wodurch das Problem der Dateninkonsistenz, das bei RESTful APIs auftritt, gelöst wird.
Kein Overfetching oder Underfetching
Das Problem des Over- oder Under-Fetching ist ein bekanntes Problem bei RESTful-APIs, bei denen die Kunden entweder mehr oder weniger Informationen zurückbekommen, als sie angefordert haben. GraphQL löst dieses Problem, indem es dem Kunden ein Medium zur Verfügung stellt, mit dem er die benötigten Informationen angeben kann, und dann genau – und nur – diese Informationen zurückgibt.
Mehrere Endpunkte
Eines der größten Probleme von RESTful-APIs ist, dass es zu viele Endpunkte für den Zugriff auf Informationen gibt.
Nehmen wir an, du möchtest über die ID-Nummer eines bestimmten Nutzers zugreifen. Dann wird dir ein Endpunkt wie /users/1
angeboten. Wenn du aber auf die Fotos dieses Nutzers zugreifen willst, musst du eine Anfrage an einen anderen Endpunkt senden, z. B. an /users/1/photos
.
Bei GraphQL hast du einen einzigen Endpunkt und musst nicht mehrere Anfragen senden, um verschiedene Informationen über den Nutzer abzurufen.
GraphQL vs. REST Showdown
Zum Schluss werden wir den Hauptunterschied zwischen GraphQL und RESTful APIs untersuchen. Danach werden wir einige Merkmale eines guten API-Designs besprechen und vergleichen, wie die beiden Technologien damit umgehen.
Leistung
Es besteht kein Zweifel daran, dass GraphQL schneller ist als RESTful APIs, weil es einen einzigen Endpunkt für den Zugriff auf alle deine Ressourcen bereitstellen kann. RESTful-APIs verwenden mehrere Endpunkte, was zu Netzwerklatenz führen kann.
Komplexität der Abfrage
Da die Endpunkte nicht in mehrere Endpunkte aufgeteilt sind, können GraphQL-Abfragen mit der Zeit immer komplexer werden. RESTful-API-Endpunkte hingegen sind getrennt, was RESTful-APIs auf einfache Abfragen beschränkt.
Popularität und Unterstützung durch die Gemeinschaft
GraphQL ist ein wachsendes API-Architekturmuster und eine Abfragesprache. Obwohl sie noch jung ist, wachsen die Akzeptanz und der Ressourcenpool schnell und es gibt bereits zahlreiche Ressourcen für diejenigen, die sie selbst erlernen möchten.
REST hingegen wird bereits von einer großen Community unterstützt und von Unternehmen aller Art genutzt, von kleinen Microservices bis hin zu komplexen sozialen Apps und darüber hinaus.
Gegenwärtig ist der Beliebtheitswettbewerb zwischen GraphQL und REST unentschieden. Beide Technologien sind nach wie vor weit verbreitet und werden von der Entwicklergemeinschaft gut unterstützt.
Lernkurve
Die Lernkurve für GraphQL ist steil. Sie erfordert gute Kenntnisse in der API-Entwicklung und im allgemeinen Software-Engineering. Ein absoluter Anfänger wird es schwer haben, GraphQL gut genug zu verstehen, um eine komplexe Anwendung zu entwickeln.
Im Gegensatz dazu ist der Einstieg in REST sehr einfach und erfordert von Anfang an weniger Fachwissen. RESTful API ist in die meisten wichtigen Programmiersprachen und beliebten Frameworks integriert, was das Erlernen sehr einfach macht.
Zusammenfassung
GraphQL ist eine neue Technologie, die in die Fußstapfen der RESTful-API-Architekturmuster tritt, so wie REST eingeführt wurde, um Probleme mit SOAP-API-Mustern zu lösen.
GraphQL bietet dir schnellere Antworten, einen einzigen API-Endpunkt für alle deine Abfragen und ein strenges Schema für einen konsistenten Datenzugriff. Diese Gründe haben dazu geführt, dass milliardenschwere Unternehmen bereits in der Anfangsphase auf GraphQL umsteigen. Doch trotz seiner Einschränkungen ist der Vorläufer von GraphQL, REST, nach wie vor sehr präsent.
In diesem Leitfaden erfährst du alles, was du über GraphQL und RESTful APIs wissen musst, einschließlich der Vor- und Nachteile der beiden Technologien, damit du dich sicher entscheiden kannst, welche du bevorzugst. Außerdem haben wir uns mit den bekannten Problemen von RESTful-APIs beschäftigt – wie z. B. Overfetching, Underfetching und mehrere Endpunkte – und wie GraphQL diese Probleme löst und die Leistung deiner App verbessert.
Jetzt hast du genug Einblick, um zu entscheiden, ob GraphQL oder REST für dein nächstes Projekt geeignet ist. Lass uns in den Kommentaren wissen, was du mit deinem gewählten Sieger entwickeln wirst!
Schreibe einen Kommentar