GraphQL Server

Die Verarbeitung von GraphQL Anfragen
Account Avatar
Jens Dressler
Founder & CEO

GraphQL ist eine Abfragesprache für APIs und eine serverseitige Laufzeitumgebung, die 2015 als Open Source veröffentlicht wurde. Sie erfreut sich wachsender Beliebtheit und wird von großen und kleinen Unternehmen zur Steigerung der Produktivität eingesetzt.

Im Artikel Was ist GraphQL? beschreiben wir die Vorteile von GraphQL für App- und Webentwickler. Die folgende Liste hebt einige der entscheidenden Vorteile von GraphQL hervor:

  • Ein einziger Endpunkt
  • Datensparsamkeit
  • Starke Typisierung
  • Der Client definiert welche Daten zurückkommen
  • Echtzeit-Fähigkeiten

Damit all dies funktioniert, muss ein GraphQL-Server die Schwerstarbeit leisten und sicherstellen, dass möglichst wenige Datenbankabfragen zu einem zufriedenen Kunden führen. Der GraphQL-Server projiziert die von der Datenquelle abgerufenen Ergebnisse auf die angegebenen Abfragefelder und validiert und erzwingt die definierte Abfragestruktur.

Wie arbeitet ein GraphQL Server?

Obwohl nicht offiziell Teil der Spezifikation, verwenden die meisten GraphQL-Clients und -Server ein Standardformat für die Bereitstellung von GraphQL über HTTP.

Der Konvention folgend, verwenden GraphQL-Clients im Allgemeinen HTTP-POST-Anfragen mit der folgenden Struktur:

Die Eigenschaften operationName und variables sind optionale Felder. Die Eigenschaft operationName ist nur erforderlich, wenn mehrere Operationen in der Abfrage vorhanden sind.

Der GraphQL-Standard schlägt vor, dass Clients Abfragen und Mutationen getrennt senden sollten. Ein GraphQL-Server sollte HTTP GET- und POST-Anfragen verarbeiten. Bei einer GET-Anfrage sollte der Client die Abfrage als Teil des URL-Query-Strings mit einem Parameter namens query übergeben. Bei einer HTTP-POST-Anfrage sendet der Client eine Abfrage oder Mutation über einen JSON-kodierten Body.

Jedes Mal, wenn ein GraphQL-Server eine Anfrage erhält, durchläuft er die folgenden Schritte:

  • Parsen des Anfragedokuments
  • Identifizierung von Operationen (Abfragen, Mutationen oder Abonnements)
  • Validierung von Eingabetypen, Variablen und Feldern anhand des Schemas
  • Ausführen der Operationen durch Ausführen der angehängten Resolver

Der GraphQL-Server führt Abfragen parallel aus, während Mutationen sequentiell ausgeführt werden, um sicherzustellen, dass innerhalb einer Anfrage keine Race Conditions auftreten. Obwohl die Spezifikation nicht angibt, wie der Server Operationen ausführt, durchläuft er sie in der Regel Feld für Feld und führt die angehängten Resolver für jedes GraphQL-Feld aus. Diese Ausführungsstrategie mag naiv klingen und kann zu Leistungseinbußen führen, wenn die referenzierte Datenquelle das Abrufen in Stapeln nicht unterstützt oder mehrere Abrufe für eine verschachtelte Abfrage durchführt, die immer das gleiche Ergebnis liefert.

Beispiel eines Express GraphQL Servers

Während GraphQL-APIs für Anwendungsentwickler einfacher zu integrieren sind, können sie für die mit ihrer Erstellung beauftragten Teams eine Herausforderung darstellen. Zunächst müssen die Entwickler entscheiden, ob sie einen Server von Grund auf neu erstellen oder einen der vorhandenen GraphQL-Dienste nutzen wollen.

Der schnellste Weg, einen GraphQL-Server lokal zu betreiben, ist die Verwendung von Express, einem beliebten Node.js-Framework. Stelle zuallererst sicher, dass eine aktuelle Node-Version auf deinem Rechner installiert ist. Der einfachste Weg, Node.js zu installieren und verschiedene Versionen zu verwalten, ist die Verwendung des Node-Versionsmanagers.

Mit der Bibliothek express-graphql kann man einen GraphQL-API-Server wie folgt an den Endpunkt /graphql anbinden:

Wenn alles eingerichtet ist, müssen die folgenden Befehle Terminal ausgeführt werden:

  • mkdir graphql-test
  • npm init
  • npm install express express-graphql graphql --save
  • touch server.js
  • vi server.js
  • Den obigen Programm-Code kopieren und in die Datei server.js einfügen.
  • node server.js
  • http://localhost:4000/graphql im Browser öffnen.
  • Die Query { hello } im GraphiQL Playground ausführen.

Man bekommt den Express Server lokal auf dem Rechner schnell zum Laufen. Wenn man allerdings GraphQL-Anfragen von Anwendung oder Web-Clients aus bedienen möchten, muss der Server irgendwo in der Cloud oder einem Rechenzentrum vor Ort eingerichtet und betrieben werden.

Einen GraphQL-Server produktionsreif zu machen, kann ein schwieriges Unterfangen sein, wenn man nicht über die nötige Erfahrung verfügt. Und wir haben noch gar nicht über Benutzerauthentifizierung und -autorisierung, Zugriffskontrolle, Datenverwaltung, Bereitstellung von Servern, Datenbankmigrationen und Skalierung der Infrastruktur gesprochen. Wäre es nicht unglaublich, wenn man all das sofort zur Verfügung hätte und sich stattdessen darauf konzentrieren könnten, Wertschöpfung für den eigenen Kunden zu betreiben?

Auswahl eines GraphQL-Servers

Die Suche nach GraphQL-Diensten kann zu verschiedenen Ergebnissen führen:

  • Gehostetes GraphQL
  • Serverless GraphQL
  • GraphQL-as-a-Service
  • GraphQL-Backend-Builder
  • Fully-managed GraphQL
  • DIY GraphQL-Backend

Sie alle deuten darauf hin, dass große Teile des Implementierungsprozesses automatisiert sind, so dass Sie sich auf die Schaffung von Mehrwert für den Kunden konzentrieren können, anstatt um die Instandhaltung der Server. Mit graphapi® abstrahieren wir die Komplexität der Erstellung eines GraphQL-Schemas, der Bereitstellung von Servern, der Konfiguration von Datenquellen und der Implementierung von Resolvern vollständig. Entwickler können Objekttypen und ihre Beziehungen mit einem Model-First-Ansatz definieren.

Unser Ziel ist es, Teams zu befähigen, mit Hilfe unserer No-Code Plattform Backends mit GraphQL API rasend schnell zu entwickeln. Mit graphapi® kann man innerhalb von Minuten einen GraphQL-Server mit Cloudspeicher bereitstellen.

Mehr zum Thema GraphQL