GraphQL startet nun auch im Java-Ökosystem durch

Seite 2: Spring GraphQL – von VMware

Inhaltsverzeichnis

Das Spring-Ökosystem ist mit Abstand das verbreitetste und spielt für das Setzen von Trends und der Verbreitung neuer Technologien eine bedeutende Rolle. Spring GraphQL ist ein recht neues Projekt in diesem Ökosystem. Das erste Release erschien im September 2021 unter der MIT-Lizenz auf GitHub – Rossen Stoyanchev und Andreas Marek stellten es im gleichen Jahr auf der Konferenz SpringOne 2021 vor. VMware konnte Marek, den Entwickler von GraphQL Java, für Spring GraphQL gewinnen, um GraphQL Java optimal in das Spring-Ökosystem zu integrieren. Er gab sogar sein eigenes Projekt GraphQL Java Spring auf, um gemeinsam mit VMware Spring GraphQL zu entwickeln.

Spring GraphQL unterstützt alle untersuchten Enterprise-Features – nach Einschätzung der Autoren mit der gewohnt hohen Qualität des Spring-Ökosystems. Auch die Integration in das Spring Boot Framework ist gut gelungen. Wie gewohnt werden über einen Starter die Autokonfiguration und Properties bereitgestellt, sodass Spring GraphQL einfach und schnell in Anwendungen genutzt werden kann. Seit Spring Boot 2.6 lässt sich Spring GraphQL bereits experimentell einsetzen – produktiv mit dem geplanten Release Spring Boot 2.7 in der ersten Jahreshälfte 2022.

Hervorzuheben ist die umfassende Unterstützung der Transportprotokolle, wie HTTP und Websockets, die sich synchron über Spring MVC und asynchron über Spring WebFlux verwenden lassen. Elegant ist die Datenintegration gelöst: Spring GraphQL erzeugt automatisch Spring Proxies, die eingehende GraphQL-Queries auf QueryDSL-Repositorys abbilden. Damit lassen sich einfach und schnell GraphQL-APIs für den Datenbankzugriff bereitstellen.

Netflix unterstützt und beeinflusst das Java-Ökosystem schon seit vielen Jahren, etwa durch Open-Source-Software-Projekte wie Eureka, Hystrix oder Ribbon, zusammengefasst unter Netflix OSS auf GitHub. GraphQL hat Netflix allerdings erst 2019 für sich entdeckt. Der Grund dafür war, ähnlich wie bei Facebook, dass die gestiegenen Anforderungen der vielen unterschiedlichen Clients an die API mit den aktuellen REST-APIs nicht mehr abdeckbar waren (vergleiche How Netflix Scales its API with GraphQL Federation). Im Dezember 2020 entschloss sich Netflix, ein eigenes GraphQL-Framework mit dem Namen Domain Graph Service (DGS) auf GitHub zu veröffentlichen und unter der Apache-2.0-Lizenz Open Source zu stellen. Ziel des Projekts ist es, das DGS-Framework dem Java-Ökosystem bereitzustellen und es kontinuierlich weiter zu verbessern.

Das DGS-Framework setzt auf Spring und GraphQL Java auf. Wie Spring GraphQL unterstützt DGS alle relevanten Enterprise-Features in hoher Qualität. Es bietet darüber hinaus eine gute Integration in das Spring-Boot-Framework. Dadurch lassen sich leicht und schnell GraphQL-Anwendungen erstellen. Lediglich die Dokumentation lässt an der einen oder anderen Stelle noch Wünsche offen: Bei der Evaluierung der Enterprise-Features war hin und wieder ein Blick in andere Foren notwendig, um die Implementierung zu verstehen. Da Netflix DGS bereits 2019 entwickelt hat und bis heute einsetzt, hat es einen hohen Reifegrad erreicht und lässt sich produktiv nutzen.

Herauszustellen ist, dass DGS sowohl den Contract-First- als auch den Code-First-Ansatz unterstützt und dafür Build-Plug-ins bereitstellt, um GraphQL-Schema-Dateien aus Code zu generieren – oder umgekehrt. Eine weitere Besonderheit ist die Unterstützung von GraphQL Federation, einer Spezifikation des im JavaScript-Umfeld beliebten Apollo. GraphQL Federation ermöglicht den Zugriff auf einen Graphen über mehrere Anwendungen hinweg.

Hinter GraphQL Java Kickstart steckt weder eine große Organisation noch ein Unternehmen wie VMware oder Netflix, dafür ist es aber das erste GraphQL-Framework für Java. Die Verbreitung und Akzeptanz fallen aufgrund der eher mäßigen Qualität gering aus und GraphQL Java Kickstart spannt auch kein bedeutendes Java-Ökosystem auf. Es besteht aus einer Menge von auf Spring und GraphQL Java basierten Frameworks zum Erstellen von GraphQL-Anwendungen. Die Frameworks stehen seit den Jahren 2016 und 2017 als Open Source unter MIT- und Apache-2.0-Lizenz frei zur Verfügung. Unter der Führung von Michiel Oliemans wird das Projekt GraphQL Java Kickstart bis heute aktiv vorangetrieben.

Wie Spring GraphQL und Netflix DGS unterstützt auch GraphQL Java Kickstart alle untersuchten Enterprise-Features. Es besitzt eine gute Integration in das Spring-Boot-Framework und stellt eine Reihe von Starters zur Verfügung, sodass sich schnell GraphQL-Anwendungen erstellen lassen. Allerdings ist die Qualität der Implementierung nicht so ausgereift wie bei den anderen GraphQL-Frameworks. Das liegt sicherlich daran, dass Spring GraphQL zum Spring-Ökosystem gehört und so eine optimale Implementierung und Integration in das Programmiermodell von Spring möglich war. Ähnliches gilt für DGS, das auf dem bereits existierenden Java-Ökosystem von OSS Netflix aufsetzt. GraphQL Java Kickstart arbeitet dennoch stabil und lässt sich bedenkenlos produktiv einsetzen.

Hervorzuheben ist, dass GraphQL Java Kickstart auf dem eigenen GraphQL-Tools-Framework aufsetzt. GraphQL Tools schafft die Voraussetzungen für den Contract-First-Ansatz und ermöglicht damit die Implementierung des GraphQL-Schemas über Resolver, die für die Beschaffung der Daten verantwortlich sind. Diese Resolver müssen bestimmte Interfaces aus GraphQL Tools implementieren und eine definierte Methodenkonvention einhalten. Somit sind keine Annotationen für das Mapping des Schemas auf die Implementierung notwendig. Vorbildlich gelungen ist die Integration manueller Test-Tools wie Voyager, GraphiQL, Altair oder Playground.