© Macrovector/Shutterstock.com
Vorteile und Nachteile von GraphQL

GraphQL oder REST: Die Gretchenfrage


REST ist eine der beliebtesten Optionen, um Client-Server-Architekturen miteinander zu verbinden, doch GraphQL stellt eine ernstzunehmende Alternative dazu dar. Das gilt aber nicht für alle Anwendungsfälle und jeden Kontext. Auch GraphQL hat seine Vor- und Nachteile.

Wenn es um eine herkömmliche Client-Server-Architektur geht, ist REST [1] eine der beliebtesten Möglichkeiten, um beide Welten miteinander zu verbinden. Im traditionellen REST geht es darum, Ressourcen mittels URLs zum Schreiben und Lesen anzubieten. So können Sie eine Ressource mit einer HTTP-GET-Methode lesen, eine Ressource mit einer HTTP-POST-Methode erstellen und sie mit HTTP-PUT- und DELETE-Methode aktualisieren und löschen. Diese Methode werden auch CRUD-Operationen (Create, Read, Update, Delete) genannt. Eine Ressource kann alles von Autoren über Artikel bis zu Benutzern sein. Das Format zum Übertragen dieser Daten ist bei Verwendung von REST nicht vorgegeben, meistens wird jedoch das JSON-Format dafür verwendet (Listing 1). Am Ende ermöglicht REST es Anwendungen, miteinander zu kommunizieren, indem es auf traditionellem HTTP mit URLs und HTTP-Methoden aufbaut, ohne eine eigene Spezifikation dafür zu implementieren.

Listing 1: REST-Anfrage und Antwort

// eine REST-Anfrage auf https://api.domain.com/authors/7 mit HTTP GET // die Antwort in JSON { "id": "7", "name": "Robin Wieruch", "avatarUrl": "https://domain.de/autoren/7", "firstName": "Robin", "lastName": "Wieruch" }

Nachdem REST lange Zeit den Status quo darstellte, hat sich in den letzten Jahren eine alternative Technologie namens GraphQL hervorgetan, die von Facebook entwickelt wurde. Die folgenden Abschnitte geben Ihnen eine Einführung in GraphQL, die Vor- und Nachteile und Alternativen dazu.

Was ist GraphQL?

Bevor wir uns den Vor- und Nachteilen von GraphQL zuwenden, wollen wir zunächst die folgende Frage beantworten: Was ist GraphQL? GraphQL ist eine Open-Source-Spezifikation für eine Abfragesprache (QL, Query Language), die von Facebook im Jahr 2015 herausgebracht wurde. Bevor GraphQL der Öffentlichkeit zur Verfügung gestellt wurde, hat Facebook es intern bereits seit 2012 für seine mobilen Anwendungen verwendet.

Warum eigentlich mobile Anwendungen? GraphQL wurde als Alternative zur herkömmlichen REST-Architektur entwickelt, weil es der Clientapplikation ermöglicht, nur die gewünschten Daten anzufordern – nicht mehr oder weniger. Die Clientapplikation entscheidet, welche Daten sie braucht. Wenn hier eine REST-konforme Architektur verwendet werden würde, wäre es ziemlich schwierig, diese Anforderung zu erfüllen, da dann das Backend definiert, was mit jeder Ressource auf jedem URL verfügbar ist. Es ist nicht das Frontend, das nach einer Auswahl von Daten fragt. Daher müsste das Frontend immer alle Informationen einer Ressource anfordern, obwohl es nur einen Teil davon benötigt. Dieses Problem wird als „Overfetching“ bezeichnet. Im schlimmsten Fall muss eine Clientanwendung nicht nur eine, sondern mehrere Ressourcen lesen. Das würde nicht nur zum Overfetching führen, sondern auch zu sogenannten Wasserfallnetzwerkanfragen, da mehrere Netzwerkanfragen ausgeführt werden müssten, um am Ende vielleicht nur eine Seite einer Webapplikation anzuzeigen.

Durch eine Abfragesprache wie GraphQL, die auf der Serverseite, aber auch auf der Clientseite verwendet wird, entscheidet der Client, welche Daten er benötigt, indem er nur eine Anfrage an den Server stellt. Im Fall von Facebooks Entwicklung von mobilen Anwendungen mit GraphQL wurde die Netzwerknutzung drastisch reduziert, die Menge der übertragenen Daten sank.

Facebook veröffentlichte die allgemeine GraphQL-Spezifikation und ihre Referenzimplementierung in JavaScript. Seitdem haben mehrere andere große Programmiersprachen die Spezifikation implementiert. Darüber hinaus wächst das Ökosystem um GraphQL nicht nur horizontal, indem es mehrere Programmiersprachen anbietet, sondern auch vertikal, weil Bibliotheken in den jeweiligen Programmiersprachen (z. B. Apollo, Relay) auf GraphQL aufbauen.

Wie genau funktioniert GraphQL nun aber? Eine GraphQL-Operation ist entweder ein sogennanter Query (Lesen), eine Mutation (Schreiben) oder eine Subscription (kontinuierliches Lesen). Jede dieser Operationen ist nur eine Zeichenfolge, die entsprechend der Spezifikation der GraphQL-Abfragesprache erstellt werden muss. Sobald eine solche GraphQL-Operation einen GraphQL-Server erreicht, kann diese Anfrage mit dem sogennanten GraphQL-Schema auf dem Server interpretiert und mit den Daten für die Clientanwendung aufgelöst werden. GraphQL gibt nicht vor, welche Transportschicht genutzt werden soll (oft jedoch HTTP), und welches Format für die Daten benutzt werden soll (oft jedoch JSON). Im Grunde muss es auch nicht zwangläufig in Client-Server-Architekturen angewandt werden, weil es am Ende nur eine Abfragesprache ist. Listing 2 zeigt, wie eine GraphQL Query aussehen könnte.

Listing 2: Beispiel für eine GraphQL Query

// Eine GraphQL Query autor (id: "7") { id name website artikel (limit: 2) { name urlSlug } } // ein GraphQL-Query-Ergebnis { "data": { "autor": { "id": "7", "name": "Robin Wieruch", "website": "https://robinwieruch.de", "artikel": [ { "name": "The Road to learn React [Book]", "urlSlug": "the-road-to-learn-react" }, { "name": "Taming the State in React [Book]", "urlSlug": "learn-react-redux-mobx-state-management" } ] } } }

Wie Sie in Listing 2 sehen können, fordert eine Query bereits mehrere Ressourcen (Autor, Artikel) an, die in GraphQL als Felder bezeichnet w...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang