GraphQL als API-Gateway – Teil 2: Technische Beispielimplementierung

Wie GraphQL nicht nur einzelne Schnittstellen, sondern als API-Gateway gleich ganze Systeme optimieren kann, zeigt ein praktisches Beispiel.

In Pocket speichern vorlesen Druckansicht

(Bild: PHOTOCREO Michal Bednarek/Shutterstock.com)

Lesezeit: 11 Min.
Von
  • Dominik Kress
Inhaltsverzeichnis

Mit wachsender Verbreitung von Microservice-Architekturen nimmt die Komplexität moderner verteilter Systeme zu und die lange gültige Gleichung "1 System = 1 Application Programming Interface (API)" geht nicht mehr auf. Zu den hilfreichen Innovationen für das Schnittstellenmanagement gehört GraphQL.

Während GraphQL vielen zunächst nur als eine Art von API bekannt ist, kann die Schema Definition Language bei genauerer Betrachtung wesentlich mehr. So ist GraphQL auch bei der Orchestrierung von Daten über mehrere Schnittstellen hinweg ein hilfreicher Begleiter.

Nachdem der Autor im ersten Teil dieser zweiteiligen Artikelserie die Grundlagen zum Verständnis von GraphQL und API-Gateways vorgestellt und gezeigt hat, wie sich beides theoretisch verbinden lässt, widmet er sich in Teil 2 einem praktischen Code-Beispiel. Es beleuchtet, wie ein GraphQL-API mehrere Services auf einfache Weise für Clients miteinander zu einer Schnittstelle verbinden kann.

GraphQL als API-Gateway

In einem zweiteiligen Beitrag erläutert Dominik Kress, wie sich mit GraphQL nicht nur einzelne Schnittstellen, sondern als API-Gateway gleich ganze Systeme optimieren lassen.

Die beiden Beispielservices aus Teil 1 lassen sich von GitHub als ZIP-Datei herunterladen. Nach dem Download und Entpacken der Dateien findet sich in der Dateistruktur javascript-example/graphshop-final der Sourcecode des Katalog-Service. Dabei handelt es sich um eine Node.js-Applikation. Eine vorherige Installation der Node.js JavaScript Runtime ist nötig, um diesen Service zu installieren und zu starten. Im entsprechenden Verzeichnis des Katalog-Service lassen sich dann auf der Konsole mit $ npm install und $ npm start über den Node Package Manager zuerst alle Abhängigkeiten des Dienstes installieren und der Service starten. Sobald er läuft, findet sich unter http://localhost:4000/ der GraphQL Playground, über den sich das API testen lässt. Im Code des Katalog-Service ist bereits ein Nutzer als Beispieldatensatz angelegt, der sich mit der id: 1 abrufen lässt.

Ein erster erfolgreicher Test-Query, um den Kunden mit der Id 1 aus dem Katalog-Service abzufragen (Abb. 1).

Um in den Testdaten eine globale Id zu simulieren, ist es nötig, den Beispieldatensatz im Katalog-Service anzupassen. Das id-Feld innerhalb des customerData-Objekts in der Datei index.js im Verzeichnis src/models muss statt 1 den Wert 4 enthalten.

Der Java-basierte Bestellungs-Service findet sich im Verzeichnis java-example/graphshop-final. Er benötigt vorab die Installation des Java Development Kits (JDK) und ist mit dem Build Tool Gradle verpackt, das sich über einen Wrapper innerhalb des Sourcecodes ansprechen lässt. Um den Dienst zu installieren und zu starten, sind im Verzeichnis des Bestellungs-Service in der Konsole die Befehle $ gradlew build und $ gradlew bootRun auszuführen. Nach dem erfolgreichen Start der SpringBoot-Applikation befindet sich unter dem Pfad http://localhost:8080/graphiql eine GraphiQL-Instanz, über die sich der Service testen lässt. Im Code des Bestellungs-Service ist bereits ein Nutzer als Beispieldatensatz angelegt, der sich mit der id: 4 abrufen lässt.

Erfolgreicher Test-Query, um den Kunden mit der Id 4 aus dem Bestellungs-Service abzufragen (Abb. 2).