Java-Anwendungen mit GraphQL, Teil 1

Alle reden von GraphQL: Dass die Abfragesprache auch mit Java-Anwendungen funktioniert, zeigt dieser Artikel.

Sprachen  –  36 Kommentare
Java-Anwendungen mit GraphQL, Teil 1

Effizient Daten austauschen und gleichzeitig einfach in der Entwicklung sein – das verspricht die Abfragesprache GraphQL, die seit 2015 quelloffen zur Verfügung steht. Auch prominente Unternehmen wie Twitter, GitHub oder die New York Times setzen sie ein. Grund genug, einen genaueren Blick auf sie zu werfen.

GraphQL ist zunächst eine Spezifikation, in der die Definitionsweise von APIs beschrieben ist. Außerdem ist dort definiert, wie Clients Abfragen beschreiben und ausführen können und wie Server sie verarbeiten und beantworten müssen. Es handelt sich also nicht um ein fertiges Produkt oder Framework. Allerdings gibt es eine offizielle Referenzimplementierung, die in JavaScript geschrieben ist, und eine Reihe von Frameworks und Tools für eine Vielzahl von Sprachen, die es ermöglichen, GraphQL in eigene Anwendungen zu integrieren.

Die grundlegende Idee hinter GraphQL ist, dass ein Client immer genau die Daten abfragen kann, die er für einen Anwendungsfall, zum Beispiel eine Ansicht im UI, braucht. Das soll zum einen Netzwerk-Requests und Datenvolumen optimieren, da der Client weder zu viele noch zu wenige Daten lesen oder schreiben muss. Zum anderen soll es die Entwicklung einfach und flexibel halten. Der Server stellt beliebige Daten über eine API zur Verfügung. Dabei müssen müssen Entwickler allerdings nicht auf die konkreten Anforderungen eines Clients achten, da jeder Client individuell die für ihn relevanten Daten abfragen muss.

Zur Veranschaulichung dazu dient eine kleine Beispielanwendung, in der Nutzer ihre Lieblingsbiere bewerten können. Der Quellcode ist auf GitHub verfügbar. Die Anwendung besteht clientseitig aus drei Ansichten (Seiten), die auf unterschiedliche Teile derselben Entitäten aus dem Domain Model zugreifen. Die Übersichtsseite zeigt nur den Namen der Biere (Entity Beer) und deren durchschnittliche Bewertung an. Die Detailansicht eines Biers stellt hingegen ebenfalls den Preis des Biers dar, aber zusätzlich auch dessen Bewertungen (Entities Rating und User) und die Namen der Geschäfte (Entity Shop), in denen es erhältlich ist. Die Geschäftsseite zeigt wiederum alle Informationen zu einem Geschäft, aber nur den Namen der dort erhältlichen Biere und nicht deren Bewertungen.

Drei Ansichten einer Beispielanwendung, die unterschiedliche Teile der Domain benötigen (Abb. 1)