Heim >Web-Frontend >js-Tutorial >Erstellen Sie ein GraphQL -Gateway: Kombinieren, stechen oder fusionieren Sie eine Datenquelle
Kernpunkte
In diesem Artikel wird erläutert, wie Daten aus mehreren Datenquellen abgerufen werden, während das Front-End schnell reagiert, und eine potenzielle Lösung: Verwenden von GraphQL-Gateway.
Als Software -Ingenieure stehen wir alle der Herausforderung, Daten aus mehreren Systemen zusammenzustellen. Sogar für eine einzelne Seite sind Daten aus mehreren Diensten zu erbringen.
Daten sind überall, von CRM über Finanzsysteme, von SaaS -Plattformen bis zu Datenbanken. Es ist unvermeidlich, dass jedes Unternehmen eine große Anzahl von SaaS -Plattformen kauft und dann hoffen, eine einheitliche Geschäfte auf allen zu erhalten. Wir müssen uns diesem Problem stellen und alles zusammenfügen.
GraphQL Gateway kombiniert die Vorteile herkömmlicher API -Gateways und GraphQL.
Wir werden zuerst die Vorteile von API -Gateways diskutieren und dann sehen, wie GraphQL in sie passt. Bitte lesen Sie diesen Artikel weiter, wir werden einige Frameworks für den Aufbau unserer eigenen API -Gateways abdecken.
Vorteile des API -Gateways
schützen öffentlich ausgerichtete APIs vor Hackern ist ein Allwetterjob. Im Laufe der Zeit haben sich Unternehmen entwickelt, um viele APIs von serviceorientierten Architekturen bis hin zu Microservices zu schaffen. Organisationen neigen dazu, eine zusätzliche Sicherheitsebene hinzuzufügen, anstatt diese APIs direkt ins Internet zu setzen, was all diesen APIs voraus ist und sicherzustellen, dass der Zugriff auf Daten immer denselben Authentifizierungsregeln folgt.
Sie verwenden das API -Gateway, um dies zu tun.
Produkte wie Kong oder Apigee enthüllen interne APIs von einem zentralen Ort. Sie fungieren als Reverse -Proxy mit Funktionen wie API -Schlüsselmanagement, Ratenbegrenzung und Überwachung.
MitAPI Gateway können wir steuern, wer und was auf jeden Dienst zugreifen, Verbindungen überwachen und Zugriff aufzeichnen können.
In letzter Zeit müssen Anwendungen Daten von API -Gateways und anderen externen SaaS -Anbietern kombinieren. Dies bedeutet, dass die alten zentralisierten Werkzeuge (sicherstellen, dass unsere Regeln befolgt werden) jetzt regelmäßig umgangen werden.
Angenommen, wir erstellen eine Webanwendung für das Unternehmen. Unsere Aufgabe ist es, Benutzerprofilseiten zu erstellen. Während des Anmeldungsprozesses müssen wir Daten aus mehreren Systemen kombinieren:
Der Client muss drei separate Anforderungen ausstellen, um die Daten zu erhalten, wie in der folgenden Abbildung gezeigt.
im obigen Bild sendet der Web-Client drei separate API-Anfragen, und dann müssen die Ergebnisse im Front-End-Code kombiniert werden. Das Senden mehrerer Anfragen kann die Leistung Ihrer Anwendung beeinflussen und diese Daten kombinieren können die Komplexität Ihres Codes erhöhen. Wenn es mehrere Anwendungen gibt, müssen jetzt alle Anwendungen über alle Backends Bescheid wissen, und eine einzige API -Änderung in einem Dienst kann zu Aktualisierungen für alle unsere Anwendungen führen.
wir können es besser machen. Idealerweise möchten wir die Anfrage von drei auf eins reduzieren. Wir können dazu einen neuen Dienst erstellen - einen Dienst, der Anfragen nach Backend -Diensten koordiniert. Diese Idee hat einen Namen: BFF -Modus.
Das Backend, dh der Frontend -Architekturmodus (BFF), ermöglicht dem Frontend eine einzige Anfrage.
Aber wie funktioniert es? Schauen wir uns dieses Muster genauer an.
Vorteile des BFF -Modus
Verwenden des BFF -Modus sendet die Anwendung eine einzige Anforderung an das API -Gateway. Der BFF -Dienst fordert dann Daten von jedem Backend -Dienst an und kombiniert diese. Schließlich werden die Daten gefiltert und nur die vom Frontend erforderlichen Daten werden zurückgegeben, wodurch die Menge der über das Netzwerk übertragenen Daten verringert wird.
Wie im obigen Bild gezeigt, führen wir eine zusätzliche Ebene in den Stapel ein, um Anforderungen zu koordinieren.
Der Endpunkt des Benutzerprofils gibt die von der Anwendung auf der Profilseite erforderlichen Daten zurück. Die Reduzierung unserer drei Anfragen auf eins hat unsere vorherigen Leistungsprobleme gelöst.
Aber wir sind noch nicht fertig.
Das Unternehmen beschließt, eine mobile App zu veröffentlichen. Die mobile App verfügt auch über eine Profilseite, in diesem Bildschirm werden jedoch viel weniger Profilinformationen angezeigt.
Zu diesem Zeitpunkt hat das mobile Team zwei Optionen. Das Team kann die Endpunkte des Webteams verwenden, was bedeutet, dass wir Daten überfassen (mehr Daten erhalten, die die mobile App nicht benötigt). Eine weitere Möglichkeit besteht darin, Ihre eigenen BFFs im mobilen Team zu erstellen.
Nach den Erwartungen beschloss das mobile Team, seine eigenen BFFs zu erstellen, da es eine gute Leistung für seine Anwendungen wünschte.
Wie im obigen Bild gezeigt, werden die Dinge kompliziert und wir haben jetzt zwei neue Probleme:
Wie lösen wir diese Probleme?
Wir benötigen eine Lösung, bei der jede Anwendung die benötigten Daten auswählen kann, und es sollte eine einzige API sein, die von allen Anwendungen des Unternehmens verwendet wird.
Wie BFF reift, haben viele Entwickler begonnen, GraphQL anstelle von Ruhe zu verwenden.
Lassen Sie uns sehen, wie diese Technologie helfen kann.
Die Vorteile von GraphQL gegenüber BFF
GraphQL hat viele Vorteile, die es zu einer idealen Technologie für BFF machen:
Das Front-End kann jetzt nur die erforderlichen Daten für jede Anforderung auswählen.
Wir können jetzt zwei unserer Anwendungen mit demselben GraphQL -Server verbinden, wodurch die Notwendigkeit eines zweiten BFF -Dienstes verringert wird.
Wir können jetzt BFF für jede Bewerbung in unserer Organisation teilen. Wir haben auch einen einzigen Endpunkt, der für die Penetration getestet werden muss.
Aber wir haben ein weiteres neues Problem vorgestellt! Wir müssen noch zwei Systeme verwalten - API Gateway und GraphQL BFF.
Was ist, wenn wir die beiden in ein GraphQL -Gateway verschmelzen?
Schauen wir uns als nächstes an, wie GraphQL Gateway funktioniert.
Was ist ein GraphQL -Gateway?
GraphQL Gateway kombiniert das API -Gateway mit GraphQL -API für die besten Ergebnisse beider Technologien.
Lassen Sie uns die Vorteile überprüfen:
Das folgende Bild zeigt, wie Benutzerprofil -API -Anforderungen mit GraphQL Gateway funktionieren.
Im obigen Bild sendet der Client eine einzige Anforderung an das GraphQL -Gateway und fordert seine erforderlichen Daten an. Das Gateway stellt eine einzige Anfrage an jeden Dienst aus und kombiniert die Ergebnisse. Wir haben jetzt nur einen Dienst, der verwaltet und bereitgestellt werden muss.
Ich hoffe, Sie sind bereit, es selbst zu probieren. Lassen Sie uns als nächstes sehen, wie Sie ein GraphQL -Gateway erstellen.
bauen Sie GraphQL Gateway
Bei der Auswahl eines Gateway -Frameworks müssen wir nach wichtigen Funktionen suchen:
Es stehen viele Frameworks zur Auswahl, aber ich empfehle, die folgenden drei Frameworks weiter zu untersuchen.
Hasura ist im Laufe der Jahre immer beliebter geworden, zunächst als GraphQL-Over-Postgres-Server. Es erhöht jedoch die Fähigkeit, sich mit externen Systemen zu verbinden.
Wir können eine Verbindung zu einem "Remote -Modus" herstellen, der GraphQL von anderen Servern kombiniert.
Diese Methode hat einige Nachteile. Zunächst müssen wir unser Remote -Schema in einem separaten Dienst erstellen und verwalten, und dieser Dienst muss ein GraphQL -Endpunkt sein. Dies führt zu einem zweiten Problem: Wir können keine direkte Verbindung zur Datenquelle herstellen.
Zusätzlich erlaubt Hasura uns nicht, Daten in einer Datenquelle basierend auf den Werten in einer anderen Datenquelle zu filtern. Dies mag akademisch klingen, aber wir möchten oft so etwas wie "Gib mir eine Bestellung mit dem Namen" ABC "aus.
Dies bietet Flexibilität, aber auf Kosten des Ausführens mehrerer Dienste. Schauen wir uns eine Option an, die direkt angeschlossen werden kann.
mit Stepen können wir über den GraphQL -Server direkt an die Datenquelle hergestellt werden. Dies reduziert die Notwendigkeit, mehrere Dienste auszuführen, um ein Gateway zu erstellen.
Um Schrittzahlen mit der Datenquelle zu verbinden, erstellen wir eine GraphQL -Schema -Datei wie unten gezeigt:
<code>type Query { anything(message: String): JSON @rest ( endpoint: "https://httpbin.org/anything" method: POST headers: [ {name: "User-Agent", value: "StepZen"} {name: "X-Api-Key", value: "12345"} ] postbody: """ { "user": { "id": "1000", "name": "The User" } } """ ) } </code>
In diesem Beispiel verwenden wir den benutzerdefinierten Modus, um den Server mit der Datenbank zu verbinden.
Es gibt eine andere Option, die Sie bevorzugen, nämlich der reine Codeansatz. Schauen wir uns als nächstes an.
In den letzten Jahren habe ich ein Open -Source -Produkt namens GraphWeaver entwickelt, das als GraphQL -Gateway verwendet werden kann.
Es wird direkt mit unserer Datenquelle verbunden und erstellt eine sofortige GraphQL -API. Diese API enthält alle CRUD -Vorgänge, von denen wir möglicherweise erwarten, dass sie erstellen, lesen, aktualisieren und löschen. Es generiert automatisch Filter, Sortier- und Paging -Parameter und speichern Sie die Zeit. Wir können integrierte Vorgänge mit unserem Code für vollständige Flexibilität erweitern.
GraphWeaver bietet Datenverbindungen für Datenbanken wie Postgres und MySQL sowie SaaS -Anbieter wie Xero und Contentful.
Änderungen vornehmen oder eine Verbindung zu Datenquellen herstellen, beinhaltet das Schreiben von TypeScript -Code, sodass wir eine vollständige Anpassung vornehmen können.
Wenn Sie Ihre eigene GraphQL -API erstellen möchten, empfehle ich Ihnen dringend, den Github -Code von Graphweaver zu lesen.
Schlussfolgerung
In diesem Artikel untersuchen wir, wie unser aktuelles API -Gateway und BFF -Muster durch ein einzelnes GraphQL -Gateway ersetzt werden.
Wir haben die Vorteile von API -Gateways untersucht und warum Organisationen sie verwenden. Versioning, Ratenbeschränkung und Zugriffsmanagement sind einige Gründe.
Wir haben uns auch das BFF-Muster angesehen und wie es API-Anforderungen für Front-End-Anwendungen koordiniert.
Schließlich haben wir uns GraphQL angesehen und warum es eine vorteilhafte Technik für BFF ist.
Ende des Tages führte wir dazu, ein GraphQL -Gateway zu erstellen, und wir haben uns drei Optionen angesehen, um unsere eigenen zu erstellen: Hasura, Stepen und das Produktgrafikwwea, das ich entwickelt habe.
Ich hoffe, dieser Artikel überzeugt Sie, selbst zu versuchen, selbst GraphQL Gateway zu verwenden. Wenn Sie können, sollten Sie Graphweaver ausprobieren.
GraphQL Gateway FAQ (FAQ)
Das GraphQL -Gateway fungiert als einzelner Einstiegspunkt für alle GraphQL -Operationen. Es ist dafür verantwortlich, Anforderungen an den entsprechenden Dienst zu leiten, die Antworten zu aggregieren und an den Kunden zurück zu senden. Auf diese Weise können Sie mehrere GraphQL -Muster und -Dienste an einem einzigen Ort verwalten, sodass Ihre Anwendungen skalierbar und einfacher zu warten sind.
Das traditionelle API -Gateway ist für die Behandlung von erholsamen APIs ausgelegt, und sein Betriebsmodus unterscheidet sich von dem von GraphQL. Andererseits sind GraphQL -Gateways speziell für die Behandlung von GraphQL -Operationen ausgelegt. Es bietet Funktionen wie Musternähte und Verschmelzung, mit denen Sie mehrere GraphQL -Muster in einem kombinieren können. Dies ist etwas, was traditionelle API -Gateways nicht tun können.
Modusstiche ist eine Funktion des GraphQL -Gateways, mit der Sie mehrere GraphQL -Muster in einem kombinieren können. Dies ist besonders nützlich, wenn Sie mehrere Dienste haben und jedes ein eigenes Schema hat und sie als einzelne API aufdecken. Musternähten sind für das Zusammenführen der Muster und die Lösung von Konflikten verantwortlich und bieten dem Kunden eine nahtlose Erfahrung.
GraphQL -Gateways können die Leistung erheblich verbessern, indem die Anzahl der Rundreisen zwischen Clients und Servern verringert wird. Anstatt mehrere Anfragen an verschiedene Dienste zu stellen, stellt der Kunde einfach eine einzige Anfrage an das GraphQL -Gateway, der dann die Anforderungen an den entsprechenden Dienst weiterleitet, die Antworten aggregiert und an den Kunden zurücksendet. Dies reduziert die Netzwerklatenz und verbessert die Gesamtleistung.
Ja, GraphQL -Gateways sind besonders für Mikroservice -Architekturen geeignet. Jeder Mikroservice kann ein eigenes GraphQL -Muster haben, das das Gateway zusammenspleißt, um eine einheitliche API zu liefern. Auf diese Weise können Sie Microservices unabhängig verwalten und skalieren und gleichzeitig Ihren Kunden eine konsistente Schnittstelle zur Verfügung stellen.
GraphQL Gateway ist sprachfrei, dh es kann mit jeder Programmiersprache verwendet werden, die GraphQL unterstützt. Dies umfasst beliebte Sprachen wie JavaScript, Python, Ruby und Java.
GraphQL Gateway bietet leistungsstarke Fehlerbehandlungsfunktionen. Wenn in einem der Dienste ein Fehler auftritt, gibt das Gateway eine detaillierte Fehlermeldung an den Client zurück, einschließlich Informationen darüber, welcher Dienst den Fehler und welcher Fehler aufgetreten ist. Dies erleichtert die Diagnose und Behebung von Problemen.
Ja, GraphQL Gateway ist mit der serverlosen Architektur kompatibel. Sie können Ihr Gateway als serverlose Funktion bereitstellen, mit der Sie die Skalierbarkeit und Kosteneffizienz des serverlosen Computers nutzen können.
GraphQL Gateway bietet eine Vielzahl von Sicherheitsfunktionen, einschließlich Authentifizierung und Autorisierung, Ratenbegrenzung und Anforderungsüberprüfung. Diese Funktionen schützen Ihre Dienste vor nicht autorisierten Zugang und Missbrauch.
Ja, Sie können das GraphQL -Gateway mit Ihrer vorhandenen RESTful -API verwenden. Gateways können Ihre erholsame API in GraphQL -Muster einwickeln, sodass Sie GraphQL nutzen können, während Sie vorhandenen APIs verwenden.
Das obige ist der detaillierte Inhalt vonErstellen Sie ein GraphQL -Gateway: Kombinieren, stechen oder fusionieren Sie eine Datenquelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!