Projekte und Forschung, Tech Talks

Tech-Talk: Beyond REST – GraphQL mit Java

Redaktion IMVS | 18. Oktober 2023

In der modernen Softwareentwicklung war REST (Representational State Transfer) lange Zeit das vorherrschende Protokoll für Web-APIs. Doch mit GraphQL, ursprünglich für Facebooks iOS-App konzipiert, steht eine vielversprechende Alternative zur Datenabfrage und -manipulation zur Verfügung.

Dominik Gruntz konnte bereits viele positive Erfahrungen mit GraphQL sammeln und hat dieses Thema deshalb im Rahmen eines Tech-Talks vorgestellt. Insbesondere legte er den Fokus anhand von Beispielen auf die Unterschiede zu REST und darüber hinaus.

Anders als in REST, werden in GraphQL alle Anfragen an einen einzelnen Endpoint, in der Regel über HTTP-Post, geschickt. Der Hauptunterschied liegt jedoch in der Datenabfrageeffizienz. 

Im Vergleich zu REST bietet GraphQL präzise, client-spezifizierte Abfragen. Dies verhindert Over-Fetching (Empfangen von Daten, die nicht gebraucht werden) und Under-Fetching (Nachladen von noch nicht vorhandenen Daten). GraphQL bildet diese client-spezifischen Abfragen in sogenannten Querys ab. Eine Query sagt dabei genau aus, welche Daten vom Server verlangt werden. Der Server liefert dann exakt die angeforderten Daten zurück – die Struktur der Antwort widerspiegelt also die Anfrage. Somit kann der Client pro Anfrage vorgeben, welche Beziehungen unter den Entitäten und welche Felder in der Antwort enthalten sein sollen. 

Nebst Queries werden auch Mutationen (Verändern von Daten) und Subscriptions (um über veränderte Daten benachrichtigt zu werden) unterstützt.

GraphiQL Webapplikation mit Beispiel-Query - Beyond REST, GraphQL mit Java
GraphiQL Webapplikation mit Beispiel-Query auf der linken und Antwort auf der rechten Seite.

Welche Querys abgefragt werden können und welche Entitäten es gibt, legt der Server über das sogenannte GraphQL-Schema fest. Dies ermöglicht es trotz der offenen Query-Struktur gewisse Einschränkungen vorzunehmen. Über Definitionen im Schema können Querys auch Parameter entgegennehmen. Dies erlaubt zum Beispiel die Abfrage eines spezifischen Elements über eine ID oder Serverseitiges-Paging.

Mittlerweile gibt es verschiedene Implementationen für das Protokoll das GraphQL vorgibt – unter anderem eine für Springboot. Diese kann über Gradle-Dependencies in ein Projekt integriert werden und bietet viele Features. Dominik hat diese Implementation zum Abschluss mit einem praktischen Beispiel demonstriert und so eine GraphQL-API in Java gebaut um Produkte eines Webshops verwalten. GraphQL wird aller Voraussicht nach in Zukunft immer öfter verwendet und ist ein Werkzeug das REST in einigen Aspekten überlegen ist.

Das Repository mit den Beispielen ist verfügbar unter: https://github.com/dgruntz/techtalk-graphql

Blog Beitrag von Tobias Wyss (tobias.wyss@fhnw.ch) Assistent und MSE Student

Prof. Dr. Dominik Gruntz

Leiter Institut für Mobile und Verteilte Systeme FHNW

Telefon: +41 56 202 78 08 (direkt)
zurück zu allen Beiträgen

Kommentare

Keine Kommentare erfasst zu Tech-Talk: Beyond REST – GraphQL mit Java

Neuer Kommentar

×