GraphQL startet nun auch im Java-Ökosystem durch

Die für den Enterprise-Einsatz erforderlichen Features in GraphQL-Frameworks für Java unterscheiden sich zum Teil deutlich.

In Pocket speichern vorlesen Druckansicht 42 Kommentare lesen

(Bild: sdecoret/Shutterstock.com)

Lesezeit: 16 Min.
Von
  • Michael Schäfer
  • Michael Kagel
  • Stefan Brütsch
Inhaltsverzeichnis

Bereits 2015 hat Facebook die Abfragesprache GraphQL veröffentlicht. In der Java-Welt konnte sich GraphQL aber bis heute nicht entscheidend durchsetzen. Ein Grund dafür: Das Java-Ökosystem bot lange Zeit keine Frameworks an, die Entwickler bei der Implementierung von GraphQL unterstützten. Mittlerweile ist die Auswahl aber vielfältig und die Möglichkeiten sind umfangreich. Zeit für einen umfassenden Blick auf die Frameworks und ihre Funktionen.

GraphQL ist neben SOAP, REST und gRPC eine von vielen Möglichkeiten, Schnittstellen zur Verarbeitung von Daten bereitzustellen. Facebook entwickelte GraphQL mit dem Ziel, die Nachteile von SOAP- und REST-Schnittstellen zu beseitigen. SOAP etwa ist XML-basiert und führt bei kleinen abgerufenen Datenmengen zu einem großen Protokoll-Overhead. REST offenbart immer wieder das Problem des Overfetching und Underfetching. Die Clients rufen also unter Umständen mehr Daten als nötig ab oder erhalten weniger Daten als erwünscht. Zudem gilt das Gesetz: "Kein Kontakt ohne Kontrakt!" Änderungen an der Schnittstelle müssen also zunächst serverseitig implementiert sein, ehe der Client sie benutzen kann.

GraphQL geht anders vor. Es stellt einen Pool an Daten bereit, aus denen sich der Client beliebig bedienen kann. Dazu nutzt er eine JSON-basierte Abfragesprache und stellt sich seine benötigte Datenstruktur im gewünschten Umfang zusammen. Zudem ist GraphQL keine sprachspezifische Bibliothek, sondern eine sprachunabhängige Spezifikation. Damit wollte Facebook allen Sprach-Ökosystemen die Möglichkeit geben, eine eigene Implementierung der GraphQL-Spezifikation bereitzustellen.

Die erste Implementierung der Spezifikation lieferte Facebook gleich mit, in Form von Graphql.js für JavaScript. Die adaptierfreudige JavaScript-Community griff den Ansatz wohlwollend und sehr schnell auf. Es folgten einfach zu verwendende Frameworks wie Apollo oder React, die die Verbreitung noch weiter beschleunigten. Diese Frameworks setzen auf der Referenzimplementierung von GraphQL auf und unterstützen die JavaScript-Entwickler bei der Implementierung von Frontends und Backends auf Basis von HTTP oder Websockets.

Allerdings mangelte es lange Zeit an der Unterstützung seitens der großen Java-Ökosysteme. Java-Entwicklerinnen und -Entwicklern fehlten entscheidende Enterprise-Features für die Implementierung professioneller APIs. Andreas Marek gehörte zu den Pionieren bei der Erstimplementierung von GraphQL für Java. Schon 2017 stellte er seine Variante als Open-Source-Software bereit. Erst 2021 kündigte Paul Bakker an, die GraphQL-Implementierung von Netflix, das DGS-(Domain Graph Service)-Framework, Open Source zu stellen. Es folgten weitere Frameworks und Implementierungen.

Dieser Artikel stellt die GraphQL-Frameworks der in nachfolgender Abbildung gezeigten Java-Ökosysteme vor, bewertet ihre Enterprise-Features und arbeitet die Alleinstellungsmerkmale der jeweiligen Frameworks heraus.

Java-Ökosysteme und ihre GraphQL-Frameworks

Die Blasen in der Grafik repräsentieren Java-Ökosysteme wie Spring und Jakarta sowie die von ihnen bereitgestellten GraphQL-Frameworks wie Spring GraphQL. Die Größe der Blasen repräsentiert quantitativ die Reichweite und Verbreitung der Java-Ökosysteme. Dabei handelt es sich allerdings nur um eine grobe Schätzung. Die Überlappungen der Blasen zeigen die Abhängigkeiten zwischen den Java-Ökosystemen.

Zur Implementierung professioneller APIs für Anwendungen, die Unternehmen sowohl intern als auch extern einsetzen, sind Java-Frameworks notwendig. Diese Frameworks müssen bestimmte, für den betrieblichen Einsatz notwendige Funktionen bereitstellen. Dazu gehören die Unterstützung von Transportprotokollen wie HTTP und Websockets für das Absetzen von GraphQL-Queries, die Sicherung der GraphQL-APIs etwa über OAuth 2.0 oder die Möglichkeit, GraphQL-APIs automatisiert zu testen.

GraphQL Java, eine freie Implementierung von GraphQL für Java von Andreas Marek, unterstützt diese Enterprise-Features nicht; erst mit der Integration in die großen Java-Ökosysteme stehen sie bereit. Die Autoren dieses Artikels bewerten die GraphQL-Frameworks anhand von zwölf Enterprise-Feature-Kategorien, etwa Fehlerbehandlung, Sicherheit, Entwicklungskonzepte und Bereitstellung (siehe Tabelle). In einigen Fällen findet eine detaillierte Bewertung statt, in anderen Fällen eine zusammenfassende. Eine ausführliche Bewertung findet sich auf der Internetseite GraphQL-Framework-Evaluation.

Relevante Enterprise-Merkmale und deren Bewertungskriterien
Merkmal Kriterien
Schema Support Directives, Subscriptions, Custom Scalar
User Experience Autoconfiguration, Configuration
Data Transaction Management, Data Mapper Support
Error Handling Validation Arguments, Exception Handling
Testing Integration Tests, Mocks
Security Basic Auth, OAuth 2.0/JWT, CORS, DDoS – Max Query Depth, DDoS – Max Query Complexity
Metrics Actuator Metrics, Query Metrics
Performance Caching, Batch Operation, Reactive Strems API, Websockets
Development Concepts Code First, Code First with Annotation, Contract First
Tooling Playground, GraphiQL, Altair, Voyager
Project Documentation
Provisioning Maven/Gradle