GraphQL als API-Gateway – Teil 1: Grundlagen, Theorie, Design

Die Anforderungen an APIs steigen stetig. GraphQL kann nicht nur einzelne Schnittstellen, sondern als API-Gateway gleich ganze Systeme optimieren.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen

(Bild: PHOTOCREO Michal Bednarek/Shutterstock.com)

Lesezeit: 11 Min.
Von
  • Dominik Kress
Inhaltsverzeichnis

Moderne verteilte Systeme gestalten sich immer komplexer. Vor allem durch die Einführung der Microservicearchitektur geht die Gleichung "1 System = 1 Application Programming Interface (API)" schon lange nicht mehr auf. Doch den immer höheren Anforderungen verteilter Systeme an ihre Schnittstellen folgen immer hilfreichere Innovationen – eine davon ist zweifelsfrei GraphQL.

Während vielen GraphQL 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.

In dieser zweiteiligen Artikelserie legt der Autor zunächst die Grundlagen zum generellen Verständnis von GraphQL und API-Gateways dar und zeigt auf, wie sich beides theoretisch verbinden lässt. Der anschließende zweite Teil führt an einem praktischen Code-Beispiel aus, wie ein GraphQL-Server mehrere Services auf einfache Weise für Clients miteinander zu einer Schnittstelle verbinden kann.

(Bild: graphql.org)

In erster Linie ist GraphQL eine 2015 von Facebook veröffentlichte Spezifikation einer plattformunabhängigen Query-Sprache für APIs. Das bedeutet: Mit GraphQL lässt sich eine Systemschnittstelle über ein Schema beschreiben. Die Schemata stellen dabei immer eine direkte Relation zwischen Entitäten und ihren Abhängigkeiten dar; also ein Kunde besitzt Wunschlisten, die jeweils einen Titel haben. Daten sind in Graphen entsprechend ihrer Verbindungen zu anderen Daten dargestellt – daher rührt auch der Name GraphQL.

Gegen ein solches Schema lassen sich clientseitig komplexe Datenabfragen (Querys) und Datenmanipulationen (Mutations) durchführen. Dabei kann der Client die Daten verschachtelt entsprechend ihrer Relation zueinander anfordern. Zum Werkzeugkasten der GraphQL-Schemas und -Querys gehören viele dafür nützliche Dinge wie Parameter, Variablen, Fragmente, Direktiven und anderes mehr.

Eine Query (Abfrage) und ihr Ergebnis (Abb. 2)

Innerhalb des GraphQL-Server lösen Resolver die Querys und Mutationen auf. Ein Resolver interpretiert die Anfrage an die GraphQL-API, übersetzt die Felder in die Geschäftslogik des darunterliegenden Service und liefert schließlich die gewünschten Werte an den Client zurück.

Vereinfachte Darstellung der GraphQL API (Abb. 3)