GraphQL vs. REST: Alles, was Sie wissen müssen
Veröffentlicht: 2022-09-20Es kann schwierig sein, die Technologien auszuwählen, die in den Tech-Stack Ihres nächsten Projekts aufgenommen werden. In vielen Fällen – und insbesondere bei der Wahl zwischen GraphQL- und RESTful-APIs – geht es darum, die nächstbeste API-Designarchitektur zu wählen.
Es gibt vier wichtige Möglichkeiten, APIs zu erstellen: SOAP, GRPC, REST und GraphQL. Wir beschränken uns oft auf REST und GraphQL, wenn wir APIs erstellen möchten. Dies liegt daran, dass REST die traditionellen Methoden zum Erstellen von APIs mit SOAP und GRPC verändert hat.
GraphQL wird weithin als besseres REST bezeichnet, da es eine bessere Möglichkeit zum Erstellen von APIs darstellt. Viele Entwickler glauben, dass GraphQL REST ersetzen wird. Viele andere haben bereits entdeckt, dass GraphQL dabei hilft, einige häufige Herausforderungen zu lösen, mit denen Entwickler beim Erstellen von REST-APIs konfrontiert sind.
Diese beiden Methoden zum Erstellen von APIs sind völlig unterschiedlich. In der Praxis funktionieren diese Technologien, indem sie eine HTTP-Anforderung senden und das Ergebnis empfangen. Beide haben ihre Vor- und Nachteile, und in diesem Artikel werden wir ausführlich auf diese beiden großartigen Technologien eingehen, die die Art und Weise verändert haben, wie wir APIs entwickeln und skalieren.
Bevor wir jedoch in die Details eintauchen, wollen wir zunächst die Bedeutung von GraphQL- und RESTful-APIs untersuchen.
Was ist GraphQL?
GraphQL ist eine API-Abfragesprache sowie eine Laufzeitumgebung zum Beantworten dieser Abfragen mit vorhandenen Daten. Es ist außerdem mit leistungsstarken Tools ausgestattet, um selbst die komplexesten Abfragen zu bearbeiten.
Das zentrale Merkmal von GraphQL ist seine Fähigkeit, nur die angeforderten spezifischen Daten anzufordern und zu empfangen – nicht mehr. Dies macht es viel einfacher, Ihre APIs zusammen mit Ihrer App zu skalieren.
Der aufregendste Teil von GraphQL ist seine Fähigkeit, Ihnen alle Daten in einem Endpunkt bereitzustellen.
Das obige Diagramm ist eine typische Darstellung der GraphQL-Architektur. Clients stellen Anfragen von verschiedenen Geräten, und GraphQL verarbeitet ihre Anfragen und gibt nur die angeforderten Daten zurück. Dies löst das Problem des Überholens und Unterholens in RESTful-APIs.
Im obigen Beispiel zeigen wir einen GraphQL-Playground und wie Sie Daten mit einem einzigen Endpunkt abfragen können. Oben befindet sich der API-Endpunkt, links die Abfrage, die die Namen der Kontinente anfordert, und schließlich antworten wir rechts auf die von uns angeforderte Abfrage.
GraphQL wurde von Facebook mit dem Hauptzweck entwickelt, die Erfahrungen der Entwickler mobiler Apps bei der Arbeit mit REST-APIs zu verbessern. Seit der Veröffentlichung der ersten Open-Source-Version im Jahr 2015 hat GraphQL ein enormes Wachstum erlebt, da die Technologie von großen Akteuren im Technologiegeschäft übernommen wurde.
Unternehmen, die GraphQL verwenden
Nachfolgend finden Sie eine Liste mit einigen der Unternehmen und Anwendungen, die GraphQL aktiv auf ihren Servern verwenden.
Facebook hat GraphQL entwickelt und verwendet es seit 2012 in der Produktion, um seine mobilen Apps zu betreiben. Das Multi-Milliarden-Dollar-Unternehmen für soziale Netzwerke veröffentlichte die GraphQL-Spezifikation im Jahr 2015 und machte sie in vielen Umgebungen und für Teams aller Größen zugänglich .
GitHub
GitHub kündigt auch die Verwendung von GraphQL an, indem es eine GraphQL-API zum Erstellen von Integrationen, zum Abrufen von Daten und zum Automatisieren Ihrer Arbeitsabläufe mithilfe der GitHub GraphQL-API bereitstellt. Die GitHub GraphQL API bietet präzisere und flexiblere Abfragen als die GitHub REST API.
Pinterest ist auch ein Early Adopter von GraphQL. Der Foto-Sharing-Riese hat öffentlich über seine frühe Erforschung von GraphQL und darüber gesprochen, 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 weitreichende Präferenz für REST nimmt weiter zu.
Was ist die RESTful-API?
REST steht für „Representational State Transfer“, ein Software-Architekturstil für verteilte Hypermedia-Systeme. Es 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 dieser API als „RESTful“ bezeichnet. Die WordPress REST API ist ein Paradebeispiel dafür.
Nachfolgend sind einige der Prinzipien und Einschränkungen aufgeführt, 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 getrennt und können nur über die Endpunkte kommunizieren.
- Einheitliche Schnittstelle: Die in der Schnittstelle angezeigten Daten 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 erforderlichen Informationen enthalten, um sie von Grund auf neu zu bearbeiten.
- Cache-Fähigkeit: Caching und Sitzungsspeicherung sind zulässig, müssen jedoch so konfiguriert werden, dass Endbenutzer das Daten-Caching ablehnen können.
- Layered System Architecture: APIs müssen so konzipiert sein, dass weder der Client noch der Server feststellen können, ob sie direkt oder über einen Vermittler kommunizieren.
Das folgende Diagramm zeigt die grundlegende REST-Architektur. Es zeigt, wie Anforderungen und Antworten normalerweise gehandhabt werden.
Vorteile von GraphQL
Im Folgenden sind einige Vorteile der Verwendung von GraphQL aufgeführt, die veranschaulichen, warum es mehr als ausreichend ist, um die nächste Milliarden-Dollar-App zu erstellen.
Abrufen von Daten über einen einzelnen API-Endpunkt
Der Hauptvorteil von GraphQL ist seine Fähigkeit, über einen einzigen API-Endpunkt auf beliebige oder alle Datenpunkte zuzugreifen.
Eines der häufigsten Probleme mit RESTful-APIs sind zu viele Endpunkte für den Zugriff auf Informationen. In GraphQL haben Sie nur einen einzigen Endpunkt, sodass Sie nicht mehrere Anfragen senden müssen, um verschiedene Informationen zu einem Objekt abzurufen.
Das folgende Diagramm zeigt ein klares Beispiel für das Abrufen von Ressourcen mit RESTful API und GraphQL. Sie können sehen, dass es nur einen Endpunkt gibt, um auf die Ressource im GraphQL-Server zuzugreifen, während mehrere API-Endpunkte benötigt werden, um auf verschiedene Ressourcen in der RESTful-API zuzugreifen.
Kein Überholen oder Unterholen
Das Problem des Über- oder Unterladens ist ein bekanntes Problem mit RESTful-APIs. Dies ist der Fall, wenn Clients Daten herunterladen, indem sie auf Endpunkte treffen, die feste Datenstrukturen zurückgeben, oder wenn sie entweder mehr oder weniger als erwartet abrufen.
Übermäßiges Abrufen führt dazu, dass die Anfrage mehr Daten empfängt – oder „abruft“ – als für eine bestimmte Anfrage erforderlich ist. Stellen Sie sich vor, Sie rufen alle Benutzer in einer Tabelle ab, um ihre Benutzernamen auf Ihrer Homepage anzuzeigen. In diesem Fall werden beim Überholen alle Daten zu jedem Benutzer zurückgegeben, einschließlich (aber nicht nur) des Namens.
Underfetching ist vergleichsweise selten, kommt aber vor, wenn der spezifische Endpunkt nicht alle angeforderten Informationen bereitstellt. Der Client muss bei Bedarf zusätzliche Anfragen stellen, um auf die anderen Informationen zuzugreifen.
GraphQL löst effizient das Problem des Über- oder Unterholens, indem es ohne zusätzliche Details genau die Ressource greift, die der Client angefordert hat.
Besserer Umgang mit komplexen Systemen und Microservices
GraphQL kann die Komplexität integrierter multipler Systeme vereinheitlichen und verbergen.
Angenommen, wir möchten von einer monolithischen Backend-Anwendung zu einer Microservice-Architektur migrieren. Die GraphQL-API hilft bei der Abwicklung der Kommunikation zwischen verschiedenen Microservices, indem sie sie in einem GraphQL-Schema zusammenführt.
Sobald diese Schemata definiert sind, können sowohl das Frontend als auch das Backend ohne weitere Änderungen separat kommunizieren, da das Frontend weiß, dass die Daten im Schema immer systemweit synchron sind.
Schnell und sicher
Das Problem des Überladens kann zu einem höheren Bandbreitenverbrauch für Clients führen, was mit der Zeit zu Verzögerungen in Ihrer Anwendung führen kann. Die Verwendung von RESTful-API-Entwurfsmustern ist zeitaufwändiger, um die benötigten Informationen aus einer enormen Nutzlast herauszufiltern.
Aufgrund der Fähigkeit von GraphQL, Über- und Unterabrufe zu vermeiden, gibt der Server eine sichere, leicht lesbare und vorhersehbare Form zurück, die Ihre API-Anfragen und -Antworten schneller macht.
Vorteile von REST
Trotz der wachsenden Popularität von GraphQL ist REST immer noch einer der beliebtesten API-Standards. Werfen wir einen Blick darauf, warum.
- Lernkurve: RESTful APIs sind am einfachsten zu erlernen und zu verstehen. Dies ist der Hauptvorteil gegenüber anderen APIs.
- Serialisierung: REST bietet einen flexiblen Ansatz und Formate für die Serialisierung von Daten in JSON.
- Caching: Die REST-API kann mit Hilfe eines HTTP-Proxy-Servers und Caches eine hohe Last bewältigen.
- Komplexe Anfrage: REST-APIs haben einen separaten Endpunkt für verschiedene Anfragen, was dazu beiträgt, die komplexe Anfrage besser zu verwalten als in anderen APIs
- Sauber und einfach: REST-APIs sind elegant, einfach und sauber. Sie sind einfach zu erkunden.
- Standard-HTTP-Prozeduren: REST verwendet Standard-HTTP-Prozeduraufrufe, um Daten abzurufen und Anforderungen zu stellen.
- Client/Server: Das bedeutet, dass seine Geschäftslogik von der Präsentation entkoppelt ist. So können Sie das eine ändern, ohne das andere zu beeinflussen.
- REST ist zustandslos: Alle zwischen Client und Server ausgetauschten Nachrichten verfügen über den gesamten Kontext, der erforderlich ist, um zu wissen, was mit der Nachricht zu tun ist.
Nachteile von GraphQL
Nachdem wir nun die Vorteile von GraphQL gegenüber REST besprochen haben, wollen wir einige der Nachteile von GraphQL untersuchen:
- Schwierige Lernkurve: GraphQL ist nicht so einfach zu erlernen wie REST. Der schwierigste Teil beim Erstellen einer GraphQL-API ist das Entwerfen des Schemas. Dies erfordert viel Zeit und Domänenwissen.
- Hochladen von Dateien : GraphQL hat keine native Funktion zum Hochladen von Dateien. Dies kann mit Base64-Codierung umgangen werden, aber die Kosten für die Codierung und Decodierung auf diese Weise können zeitaufwändig und teuer sein.
- Web-Caching: Caching hilft, den häufigen Datenverkehr zum Server zu reduzieren, wodurch die Anforderungen und der Antwortprozess beschleunigt werden, indem häufig aufgerufene Informationen in der Nähe des Servers gehalten werden. GraphQL unterstützt oder verlässt sich nicht auf HTTP-Caching-Methoden, sondern hängt stattdessen von den Caching-Mechanismen der Apollo- oder Relay-Clients ab.
- Ungeeignet für kleine Anwendungen: GraphQL ist möglicherweise nicht die beste API-Architektur zum Erstellen einer kleinen Anwendung. Wenn Ihre App nicht die flexibleren Abfragen von GraphQL erfordert, ist REST der richtige Weg.
- Komplexes Abfrageproblem: Die Fähigkeit von GraphQL, einem Client genau das zu geben, was er will, kann auch zu Problemen bei der Abfrageverbreitung führen. Wenn ein Client zu viele verschachtelte Abfragen sendet, kann dies 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 Anforderungen zu erfüllen.
Nachteile von REST
Wenden wir uns nun einigen der Nachteile von REST zu:
- Mehrere Roundtrips: Das größte Problem bei REST-APIs ist die Natur zahlreicher Endpunkte. Das bedeutet, dass der Client, um alle Ressourcen für eine vollständige Anwendung zu erhalten, unzählige Roundtrips durchführen muss, um die Daten zu erhalten.
- Overfetching und Underfetching: Das Problem des Overfetching und Underfetching ist ein großer Nachteil von RESTful APIS. Es kann zu Verzögerungen bei den Antworten führen, da große unerwünschte Payloads abgerufen werden.
- Hierarchie: Da REST-APIs auf URI-referenzierenden Ressourcen aufgebaut sind, eignen sie sich schlecht für Ressourcen, die nicht natürlich organisiert sind oder auf die in einer einfachen Hierarchie zugegriffen wird.
Warum GraphQL anstelle von REST verwenden?
Als Nächstes werden wir erörtern, warum Sie GraphQL für Ihre zukünftige API-Entwicklung anstelle von RESTful API in Betracht ziehen sollten.
Stark typisiertes Schema
GraphQL verwendet ein starkes Typsystem, um die Fähigkeiten der API zu definieren. In GraphQL wird die Schemadefinitionssprache (SDL) verwendet, um die Parameter zu definieren, wie der Client auf die Daten des Servers zugreift. Alle für den Client bereitgestellten APIs werden in SDL niedergeschrieben, wodurch das Dateninkonsistenzproblem gelöst wird, das bei RESTful-APIs auftritt.
Kein Überholen oder Unterholen
Das Problem des Über- oder Unterholens ist ein bekanntes Problem bei RESTful-APIs, bei denen Clients entweder mehr oder weniger Informationen zurückerhalten, als sie angefordert haben. GraphQL löst dieses Problem, indem es dem Client ein Medium zur Verfügung stellt, um die benötigten Informationen anzugeben, und dann genau – und nur – diese spezifischen Informationen zurückgibt.
Mehrere Endpunkte
Eines der größten Probleme von RESTful-APIs besteht darin, zu viele Endpunkte für den Zugriff auf Informationen zu haben.
Angenommen, Sie möchten auf einen bestimmten Benutzer über seine ID-Nummer zugreifen. Ihnen würde ein Endpunkt wie /users/1
. Wenn Sie jedoch auf die Fotos dieses Benutzers zugreifen möchten, müssen Sie eine Anfrage an einen anderen Endpunkt senden, z. B. /users/1/photos
.
In GraphQL haben Sie einen einzigen Endpunkt und müssen nicht mehrere Anfragen senden, um verschiedene Informationen über den Benutzer abzurufen.
Showdown zwischen GraphQL und REST
Abschließend werden wir den Hauptunterschied zwischen GraphQL- und RESTful-APIs untersuchen. Danach besprechen wir einige der Merkmale eines guten API-Designs und vergleichen, wie die einzelnen Technologien damit umgehen.
Leistung
Es besteht kein Zweifel, dass GraphQL aufgrund seiner Fähigkeit, einen einzigen Endpunkt für den Zugriff auf alle Ihre Ressourcen bereitzustellen, eine schnellere Leistung als RESTful-APIs erbringt. RESTful-APIs verwenden mehrere Endpunkte, was zu Netzwerklatenz führen kann.
Abfragekomplexität
Da Endpunkte nicht in mehrere Endpunkte unterteilt 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 Community-Unterstützung
GraphQL ist ein wachsendes API-Architekturmuster und eine Abfragesprache. Obwohl es noch jung ist, wachsen seine Akzeptanzrate und sein Ressourcenpool schnell, und es gibt bereits reichlich Ressourcen für diejenigen, die daran interessiert sind, es selbst zu lernen.
REST hingegen verfügt bereits über eine große Community-Unterstützung und wird weiterhin von Unternehmen aller Art verwendet, von Unternehmen, die kleine Microservices entwickeln, bis hin zu Unternehmen, die komplexe soziale Apps erstellen, und darüber hinaus.
Derzeit ist der Beliebtheitswettbewerb zwischen GraphQL vs. REST unentschieden. Beide Technologien sind weiterhin weit verbreitet und werden von der Entwicklergemeinschaft gut unterstützt.
Lernkurve
Die Lernkurve für GraphQL ist steil. Es erfordert gute Domänenkenntnisse 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 erstellen.
Im Gegensatz dazu ist REST sehr einfach zu starten und erfordert von Anfang an weniger Domänenkenntnisse. Die RESTful-API ist gut in die meisten wichtigen Programmiersprachen und gängigen Frameworks integriert, was das Erlernen sehr einfach macht.
Zusammenfassung
GraphQL ist eine neue Technologie, die den Spuren der RESTful-API-Architekturmuster folgt, so wie REST eingeführt wurde, um Probleme mit SOAP-API-Mustern zu lösen.
GraphQL bietet Ihnen schnellere Antworten, einen einzigen API-Endpunkt für alle Ihre Abfragen und ein strenges Schema für konsistenten Datenzugriff. Diese Gründe sind es, die Multi-Milliarden-Dollar-Unternehmen dazu veranlasst haben, bereits in der Frühphase auf GraphQL umzusteigen. Trotz seiner Einschränkungen behält der Vorläufer von GraphQL, REST, weiterhin eine starke Präsenz auf der Bühne.
In diesem Leitfaden haben wir alles untersucht, was Sie über GraphQL- und RESTful-APIs wissen müssen, einschließlich der Vor- und Nachteile jeder Technologie, damit Sie sicher entscheiden können, welche Sie bevorzugen. Wir haben auch die bekannten Probleme mit RESTful-APIs besprochen – wie Overfetching, Underfetching und mehrere Endpunkte – und wie GraphQL versucht, diese Probleme zu lösen und die Leistung Ihrer App zu steigern.
Sie haben jetzt genug Einblick, um zu entscheiden, ob GraphQL vs. REST für Ihr nächstes Projekt geeignet ist. Teilen Sie uns im Kommentarbereich mit, was Sie mit Ihrem ausgewählten Gewinner bauen werden!