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

Seite 3: Erste Designüberlegungen für das GraphQL-API-Gateway

Inhaltsverzeichnis

Bevor die Implementierung des API-Gateway beginnt, sind grundlegende Designentscheidungen zu treffen, um potenzielle Probleme vorab lösen zu können. Gerade in der Konzeptphase vor der Entwicklung einzelner Services, die später mit einem API-Gateway verbunden werden sollen, ist eine Ausrichtung des generellen API-Designs (und auch Service-Designs) an das künftige API-Gateway dringend zu empfehlen.

Im Beispiel des Katalog- und Bestellungs-Service existiert in beiden Services ein Kunden-Objekt mit einer Id. Um eine Referenz des Kunden aus dem Katalog-Service zum Kunden im Bestellungs-Service herstellen zu können, muss die Id ein globaler, eindeutiger Identifikator über alle Services hinweg sein. Ist dies nicht der Fall, ist ein Mapping der jeweiligen Kunden-Ids für jeden Service erforderlich. Das Gateway muss dann also einen eindeutigen Bezug einer Kunden-Id aus dem Bestellungs-Service- zu einer Kunden-Id im Katalog-Service vorhalten. Das erschwert die technische Umsetzung einer gemeinsamen Abfrage von Kunden über alle Services hinweg unnötig.

Das Schema in beiden Services zeigt jenseits der globalen Id des Kunden ein weiteres potenzielles Problem: Da beide Kunden-Modelle gleich benannt sind, werden sie definitiv in der Migration der beiden Schemata zusammengeführt. Es kann jedoch für jedes Feld nur einen Executor geben. Das bedeutet, dass ein Feld nur den Inhalt eines Service widerspiegeln kann. Es kann entweder das Customer-Objekt des Katalog- oder des Bestellungs-Service im API-Gateway als customer zurückgegeben werden.

Dieses Problem lässt sich umgehen, indem die einzelnen Felder innerhalb der ausführbaren Schema-Instanzen andere Bezeichnungen erhalten. Das zieht jedoch zusätzlichen Mapping-Aufwand nach sich, der sich nur vermeiden lässt, wenn alle Felder und Objekte bereits in der Entwicklung über alle mit dem API-Gateway verbundenen GraphQL-Schemas hinweg eindeutige Namen erhalten.

Im zweiten Teil des Artikels folgt auf die Theorie die Praxis. Anhand einer beispielhaften Implementierung des oben definierten Use Case lässt sich praktisch nachvollziehen, wie einfach die Umsetzung eines API-Gateway mit GraphQL sein kann.

Dominik Kress
ist Autor des Buches GraphQL – Eine Einführung in APIs mit GraphQL. In verschiedensten Rollen – ob beruflich oder privat – war für ihn die Optimierung von Schnittstellen schon immer ein Leitthema in der Entwicklung komplexer Systeme.

(map)