GraphQL: Eine Alternative zu RESTful-Services

Seit Roy T. Fielding im Jahre 2000 die Grundsätze von RESTful-Services, vereinfacht auch REST genannt, veröffentlichte, erfreuten sich diese APIs großer Beliebtheit beim Design von verteilten Systemen. Trotzt vieler Vorteile ist eine REST-basierte Schnittstelle nicht immer die beste Wahl.

Mit GraphQL kam 2015 eine Technologie auf den Markt, die eine interessante Alternative zu REST-APIs darstellt. Dieser Artikel gibt einen kurzen Überblick über die Funktionsweise von GraphQL im Vergleich zu REST und stellt mögliche Einsatzszenarien vor.

Was ist GraphQL?

Bei GraphQL handelt es sich um eine Query Language für APIs, die im selben Zug eine serverseitige Umgebung zur Ausführung der Queries bereitstellt. GraphQL wurde von Facebook entwickelt und als Open-Source veröffentlicht.

  • Eine GraphQL-API besteht im Wesentlichen aus zwei Komponenten:Schema: beschreibt die relevanten Daten einer API sowie ihre Beziehungen untereinander; das Schema wird mittels einer eigenen Schema Definition Language (SDL) auf dem Server erstellt
  • Query Language: wird durch Clients verwendet, um die Daten beim Server anzufragen; der Client kann hier genau angeben, welche Daten er haben möchte

Unser Anwendungsfall: eine Schauspieler-Datenbank

Unser fiktives Szenario ist eine Schauspieler-Datenbank. Diese Datenbank (Server) verwaltet Informationen zu Schauspielern sowie Filmen und bietet eine Schnittstelle zum Abrufen dieser Informationen durch unterschiedliche Anwendungen (Clients) an. Wir gehen vereinfacht davon aus, dass die Clients bestehende Daten abrufen und keine neuen Daten in die Datenbank schreiben.

Eine klassische REST-API

Wir beginnen mit einer klassischen REST-API und überlegen uns folgende Endpoints/ Resources: SCHAUSPIELER und FILME. Die REST-URLs sehen hier wie folgt aus:

URL_1 /schauspieler/:schauspieler_id
URL_2 /schauspieler/:schauspieler_id/filme/:film_id

Ist ein Client sowohl an den Informationen zu einem Schauspieler und der Filmographie interessiert, so sind dafür zwei API-Calls erforderlich. Dabei wird vorausgesetzt, dass die ID bekannt ist. Der Server liefert hier alle Daten aus, welche die Attribute SCHAUSPIELER und FILME besitzen. Die Kommunikation zwischen Client und Server könnte wie folgt aussehen:

… und eine GraphQL-API

Das Schema unserer GraphQL-API besteht aus den beiden Objekten (auch Types genannt) SCHAUSPIELER und FILM und sieht folgendermaßen aus:

Im Gegensatz zu REST kann der Client hier beim Request angeben, welche Attribute er haben möchte. Ist der Client ausschließlich an den Attributen NAME, VORNAME und FILME (mit TITEL und REGIE) eines jeden Schauspielers interessiert, so könnte er die Anfrage (Query) wie folgt formulieren:

Der Server würde hier exakt die angefragten Daten zurückliefern, nicht mehr und nicht weniger.

In unserem Szenario besitzt der GraphQL-Server einen einzigen Endpoint. Der Client benötigt somit lediglich eine Anfrage, um an alle Daten zu gelangen. Die Kommunikation zwischen Client und Server sieht vereinfach so aus:

GraphQL-API: Einsatzszenarien

Im Gegensatz zu REST reicht bei einer GraphQL-API eine einzige Anfrage an den Server (Request) aus, um alle relevanten Daten zu erhalten. Dies hat den Vorteil, dass insbesondere Clients mit schwankender oder schlechter Netzwerkanbindung entlastet werden und die Kommunikation ein Stück stabiler gestaltet werden kann. Als konkretes Beispiel kann man hier Mobile Clients nennen, die über eine der diversen Funktechnologien angebunden sind.

Des Weiteren können Clients einer GraphQL-API genau angeben, welche Daten sie haben möchten. Dies ist dann von Vorteil, wenn der Server viele Clients bedienen muss und die Clients entweder unterschiedliche Informationen aus dem Datenmodell benötigen oder unterschiedliche Versionen der API nutzen.

GraphQL vs. REST?

Eine GraphQL-API bietet für die Clients mehr Flexibilität als die herkömmliche REST-API: Hier steht der Client eindeutig im Vordergrund. In bestimmten Einsatzszenarien ist GraphQL eine sinnvolle Alternative zu REST. GraphQL ist jedoch keineswegs „ein besseres REST“. Es verfolgt schlichtweg ein anderes Konzept. Wie jede andere Technologie bringt GraphQl auch einige Nachteile mit sich. So handelt es sich dabei um ein eigens Ökosystem. Des Weiteren kann GraphQL je nach Implementierung auch zu höherer Rechenlast auf den Servern sorgen. Der Einsatz von GraphQL sollte daher immer gut überlegt und auf das konkrete Einsatzszenario zugeschnitten sein.

Jetzt lesen

Blog - Technologie & Innovation

Migration einer AngularJS Applikation – Refactoring zu TypeScript und Angular5

Jetzt lesen

Weitere News

WIR SIND FÜR SIE DA!

Mit Q_PERIOR steht Ihnen ein starker Partner zur Seite.
Wir freuen uns auf Ihre Herausforderung!

22. Mai 2018|