iX 6/2019
S. 46
Titel
Webentwicklung

Typsichere GraphQL-APIs mit Java und React

Gezielte Auswahl

Nils Hartmann

Mit GraphQL lassen sich nahezu beliebige Querys auf einem Server ausführen. Die Typisierung der Schnittstelle stellt die korrekte Verwendung der API im Client sicher. Ein Beispiel zeigt die Entwicklung einer GraphQL-API für eine Java-Anwendung mit graphql-java – und den Zugriff darauf mit React und TypeScript.

GraphQL ist eine von Facebook entwickelte Abfragesprache, die die Kommunikation zwischen (Web-)Client und Server effizienter gestalten soll. Im Unterschied zu RESTful APIs, die hierfür üblicherweise zum Einsatz kommen, können Entwickler mit GraphQL gezielt Daten abfragen. Zudem sind die Datenfelder in GraphQL-Datenstrukturen typisiert, sodass fehlerhafte Zugriffe früher entdeckt werden können.

Als Beispiel für die Entwicklung einer GraphQL-API dient eine kleine Anwendung zur Projektverwaltung, die sich auf GitHub befindet (siehe ix.de/ix1906046). Die Projekte untergliedern sich in Tasks. Sowohl Projekte als auch Tasks sind Benutzern zugewiesen. Während das Back­end der Anwendung mit Java implementiert ist, ist das Frontend in React und TypeScript geschrieben. Auf der Weboberfläche sollen je nach Ansicht unterschiedliche Daten aus allen beteiligten Entitäten (Project, Task, User et cetera) erscheinen und die Schnittstelle der Anwendung soll für Erweiterungen und weitere Clients offen sein. Dafür steht eine GraphQL-Schnittstelle zur Verfügung.

Unterschiedliche Ansichten der Projektplanungs-App benötigen unterschiedliche Daten (Abb. 1).

Abhängig davon, welche Ansicht der Benutzer öffnet, lädt die Anwendung unterschiedliche Daten. Die Projektübersichtsseite etwa enthält den Projekttitel, dessen Besitzer und die Kategorie der einzelnen Projekte (siehe Abbildung 1). Weitere Informationen aus dem Projekt, beispielsweise die Tasks, sind für diese Ansicht irrelevant. Ebenso braucht es außer dem Namen der zugeordneten Benutzer keine weiteren User-Informationen. Mit GraphQL fragt die API diese Informationen ab, ohne dass der Server sie explizit in dieser Konstellation zur Verfügung stellen müsste. Die entsprechende GraphQL-­Query sieht aus wie in Listing 1. 

GraphQL mit Java

Wer eine GraphQL-API für die eigene Java-­Anwendung bereitstellen möchte, kann das Open-Source-Projekt graphql-­java verwenden. Mithilfe des Frameworks lässt sich in drei Schritten eine GraphQL-­API für die eigene Anwendung entwickeln. Zunächst gilt es, das Schema der API zu definieren. Es legt fest, welche Objekte und Operationen es gibt und wie ein Client sie abfragen und verändern kann. Anschließend muss der Entwickler Data­Fetcher implementieren, die zur Laufzeit die Werte für abgefragte Felder ermitteln. Letztlich muss er die API über einen HTTP­-Endpunkt, beispielsweise ein Serv­let, zur Nutzung für Clients veröffentlichen.

Kommentieren