Einführung in die Node.js-Referenzarchitektur, Teil 4:GraphQL in Node.js

In diesem Teil unserer fortlaufenden Einführung in die Node.js-Referenzarchitektur gehen wir auf einige der Diskussionen ein, die das Team bei der Entwicklung des GraphQL-Abschnitts der Referenzarchitektur geführt hat. Erfahren Sie mehr über die Prinzipien, die wir berücksichtigt haben, und erhalten Sie zusätzliche Einblicke in die Entwicklung der aktuellen Empfehlungen für die Verwendung von GraphQL in Ihren Node.js-Anwendungen.

Die bisherige Serie lesen :

  • Teil 1:Überblick über die Node.js-Referenzarchitektur
  • Teil 2:Node.js anmelden
  • Teil 3:Codekonsistenz in Node.js
  • Teil 4:GraphQL in Node.js
  • Teil 5:Gute Container bauen
  • Teil 6:Auswahl von Web-Frameworks
  • Teil 7:Codeabdeckung
  • Teil 8:Typoskript

GraphQL im Node.js-Ökosystem

GraphQL ist eine Abfragesprachenspezifikation, die eine spezifische Semantik für die Interaktion zwischen Client und Server enthält. Die Implementierung eines GraphQL-Servers und -Clients erfordert in der Regel mehr Aufwand als das Erstellen von REST-Anwendungen, aufgrund der umfangreichen Natur der Sprache und zusätzlicher Anforderungen für clientseitige und serverseitige Entwickler. Betrachten wir zunächst einige Elemente der Entwicklung einer Node.js-Anwendung mit GraphQL (Abbildung 1).

Abbildung 1:Verwenden wir GraphQL für unsere neue App.

Entwicklung eines GraphQL-Schemas

Beim Erstellen einer GraphQL-API müssen client- und serverseitige Teams starke Verträge in Form eines GraphQL-Schemas definieren. Die beiden Teams müssen auch die Art und Weise ändern, wie sie bisher kommuniziert und ihre Software entwickelt haben. GraphQL erfordert intern, dass serverseitige Entwickler Methoden zur Datenverarbeitung entwickeln, die als Resolver bezeichnet werden , die mit dem GraphQL-Schema übereinstimmen , bei dem es sich um ein internes Diagramm handelt, das beide Teams erstellen und dem sie zustimmen müssen. Clientseitige Entwickler müssen normalerweise spezialisierte Clients verwenden, um GraphQL-Abfragen an den Back-End-Server zu senden.

Auswahl Ihrer Werkzeuge

Das GraphQL-Ökosystem besteht aus Tausenden von Bibliotheken und Lösungen, die Sie auf GitHub, auf Konferenzen und in verschiedenen Foren finden können, die alle Ihre GraphQL-Probleme lösen. Zusätzlich zu Frameworks und Bibliotheken (Abbildung 2) bietet das GraphQL-Ökosystem viele sofort einsatzbereite, selbst gehostete oder sogar dienstbasierte (SaaS) CRUD-Engines. Engines zum Erstellen, Lesen, Aktualisieren und Löschen (CRUD) bieten die Möglichkeit, den Umfang der serverseitigen Entwicklung zu minimieren, indem sie einen direkten Link zur Datenbank bereitstellen. Wir kommen später auf dieses Thema zurück.

Abbildung 2:Welche Tools werden wir verwenden, um GraphQL zu aktivieren?

Implementieren einer GraphQL-API

Bei der Implementierung einer GraphQL-API sehen wir oft eine Reihe von Nebenwirkungen auf andere Elemente unserer Back-End-Infrastruktur. Eine GraphQL-API wird in der Regel von unserem Back-End als einzelner Endpunkt bereitgestellt, wie in Abbildung 3 dargestellt.

Abbildung 3:Im Gegensatz zu einer REST-API wird eine GraphQL-API als einzelner Endpunkt bereitgestellt.

Die Einführung der GraphQL-API bedeutet, dass wir nicht nur die API ändern müssen, sondern oft auch unsere gesamte Infrastruktur (Abbildung 4) überdenken müssen, von der API-Verwaltung und -Sicherheit bis hin zum Caching, der Entwicklung einer Föderation von Abfragen auf Gateways und vielem mehr.

Abbildung 4:Denken Sie über Ihre GraphQL-basierte Anwendung nach, bevor Sie sie implementieren.

Schema zuerst oder Code zuerst?

Es gibt mehrere Möglichkeiten, GraphQL-Lösungen zu entwickeln. Die beiden gängigsten Ansätze sind Schema zuerst , wo Entwickler zuerst das GraphQL-Schema schreiben und später clientseitige Abfragen und Datenauflöser im Back-End erstellen und zuerst codieren (auch bekannt als zuerst Resolver), wobei Entwickler zuerst die Resolver schreiben und dann das GraphQL-Schema für sie generieren.

Beide Ansätze haben je nach Anwendungsfall Vor- und Nachteile.

Implementieren von GraphQL für Node.js

Alle Entscheidungen zur Implementierung von GraphQL zu treffen, kann entmutigend sein, wie Abbildung 5 zeigt.

Abbildung 5:Die Implementierung von GraphQL für Node.js ist keine einfache Aufgabe.

Viele Entwickler sind mit dem Arbeitsaufwand überfordert und suchen stattdessen nach Bibliotheken oder Tools, die umfassende Unterstützung bieten. Wie wir bereits erwähnt haben, wenden sich Entwickler in einem GraphQL-Ökosystem häufig an eine der verfügbaren CRUD-Engines, um Unterstützung zu erhalten (Abbildung 6).

Abbildung 6:Die Verwendung einer CRUD-Engine ist eine verlockende Problemumgehung.

CRUD-Engines versuchen, die größten Mängel und die Komplexität von GraphQL zu beheben, indem sie einen einheitlichen und Low-Code-Datenzugriff bieten. Auf lange Sicht können sie jedoch nicht die von uns gewünschten Funktionen liefern, insbesondere die Integration mit anderen Diensten.

Darüber hinaus sind die anfänglichen Ergebnisse im Zusammenhang mit der Verwendung von Produktivitätstools oft die Spitze des Eisbergs für das, was Sie bei der Bereitstellung Ihres Codes in der Produktion erwarten (siehe Abbildung 7).

Abbildung 7:Überlegungen zur Entwicklung einer Node.js-Anwendung mit GraphQL.

Teammitglieder von Red Hat verwenden GraphQL seit vielen Jahren und arbeiten mit der Community und Kunden zusammen, um verschiedene Herausforderungen anzugehen, die bei der Verwendung von GraphQL auftreten, einschließlich derer, die wir in den vorangegangenen Abschnitten besprochen haben. Als Nächstes stellen wir den GraphQL-Abschnitt der Node.js-Referenzarchitektur vor, die auf unserer Erfahrung und der von Teams innerhalb von IBM basiert.

GraphQL-Empfehlungen und Anleitungen

Bei der Arbeit am GraphQL-Abschnitt der Referenzarchitektur haben wir eine Reihe von Prinzipien und Werten diskutiert, die die dokumentierten Empfehlungen und Anleitungen beeinflusst haben. Hier geben wir einen kurzen Überblick.

Erste Entwicklung des Schemas

Um die Zusammenarbeit über verschiedene Sprachen, Microservices und Tools hinweg zu unterstützen, empfehlen wir, das GraphQL-Schema als eine Form der API-Definition zu verwenden, anstatt ein Schema aus dem Code zu generieren. Code-First-Lösungen sind in der Regel auf eine einzige Sprache beschränkt und können zu Kompatibilitätsproblemen zwischen dem Frontend und anderen nützlichen GraphQL-Tools führen.

Getrennte Bedenken

Wenn unsere Back- und Front-End-Codebasis minimal ist, können wir Tools verwenden, um Code zu generieren, unsere Schemas zu analysieren und so weiter. Diese Tools werden normalerweise nicht in der Produktion ausgeführt, bieten jedoch eine Reihe von Funktionen, die in der Referenzarchitektur fehlen. Alle Elemente sollten außerhalb Ihrer Anwendung funktionieren und können bei Bedarf ersetzt werden.

Verwenden Sie die GraphQL-Referenzimplementierung

Die Verwendung der GraphQL-Referenzimplementierung erleichtert die Unterstützbarkeit und ist anbieterunabhängig. GraphQL ist ein Linux Foundation-Projekt mit einer Reihe von Referenzbibliotheken, die unter seinem Dach gepflegt werden. Die Auswahl dieser Bibliotheken gegenüber Open-Source-Bibliotheken einzelner Anbieter und produktorientierter Open-Source-Bibliotheken verringert das Risiko der Bereitstellung von Support und maximiert die Stabilität unserer Lösungen über längere Zeiträume.

Minimalismus

Entwickler suchen oft nach Bibliotheken, die eine verbesserte API bieten und die Produktivität steigern. Unserer Erfahrung nach führt die Auswahl eines High-Level-Tools, das sich nur auf die wesentlichen Elemente konzentriert, die zum Erstellen einer erfolgreichen GraphQL-API erforderlich sind, zum besten Ergebnis. Aus diesem Grund haben wir uns entschieden, eine sehr kurze Liste von Paketen und Empfehlungen aufzunehmen, die für Entwickler nützlich sind.

Eigenständige Lösungen ausschließen

Der GraphQL-Abschnitt der Node.js-Referenzarchitektur enthält keine CRUD-Engines oder -Tools, die die Entwicklerflexibilität beeinträchtigen und proprietäre APIs einführen.

Basierend auf unserer Diskussion dieser Prinzipien und Werte sowie unseren bisherigen Erfahrungen haben wir die Empfehlungen und Anleitungen entwickelt, die in der Referenzarchitektur enthalten sind. Wir hoffen, dass dieser Artikel Ihnen einen Einblick in den Hintergrund und die Überlegungen gegeben hat, die das Team beim Erstellen dieses Abschnitts berücksichtigt hat. Weitere Informationen finden Sie im GraphQL-Abschnitt der Node.js-Referenzarchitektur.

Abbildung 8:GraphQL funktioniert!

Was kommt als nächstes?

Wir planen, regelmäßig neue Themen im Rahmen der Node.js-Referenzarchitekturserie zu behandeln. Während Sie auf die nächste Ausgabe warten, laden wir Sie ein, das Node.js-Referenzarchitektur-Repository auf GitHub zu besuchen, wo Sie sehen können, welche Arbeit wir bereits geleistet haben und auf welche Themen Sie sich in Zukunft freuen können.

Um mehr darüber zu erfahren, was Red Hat an der Node.js-Front vorhat, besuchen Sie unsere GraphQL- oder Node.js-Zielseite.