GraphQL - Schema
Ein GraphQL-Schema ist der Kern jeder GraphQL-Server-Implementierung. Es beschreibt die Funktionen, die den Clientanwendungen zur Verfügung stehen, die eine Verbindung herstellen. Wir können jede Programmiersprache verwenden, um ein GraphQL-Schema zu erstellen und eine Schnittstelle darum herum zu erstellen.
Die GraphQL-Laufzeit definiert ein generisches graphbasiertes Schema, um die Funktionen des Datendienstes zu veröffentlichen, den es darstellt. Clientanwendungen können das Schema innerhalb seiner Funktionen abfragen. Dieser Ansatz entkoppelt Clients von Servern und ermöglicht die unabhängige Entwicklung und Skalierung.
In diesem Kapitel verwenden wir den Apollo-Server, um GraphQL-Abfragen auszuführen. DasmakeExecutableSchema Die Funktion in graphql-tools hilft Ihnen beim Binden von Schema und Resolvern.
makeExecutableSchema Funktionssyntax
Das makeExecutableSchemaDie Funktion verwendet ein einzelnes Argument {} vom Objekttyp. Die Syntax für die Verwendung dieser Funktion ist unten angegeben -
import { makeExecutableSchema } from 'graphql-tools';
const jsSchema = makeExecutableSchema({
typeDefs,
resolvers, // optional
logger, // optional
allowUndefinedInResolve = false, // optional
resolverValidationOptions = {}, // optional
directiveResolvers = null, // optional
schemaDirectives = null, // optional
parseOptions = {}, // optional
inheritResolversFromInterfaces = false // optional
});
Sr.Nr. | Parameter & Beschreibung |
---|---|
1 | typeDefs Dies ist ein erforderliches Argument. Es stellt eine GraphQL-Abfrage als UTF-8-Zeichenfolge dar. |
2 | Resolvers Dies ist ein optionales Argument (standardmäßig leeres Objekt). Dies hat Funktionen, die die Abfrage behandeln. |
3 | logger Dies ist ein optionales Argument und kann zum Drucken von Fehlern auf der Serverkonsole verwendet werden. |
4 | parseOptions Dies ist ein optionales Argument und ermöglicht die Anpassung der Analyse, wenn typeDefs als Zeichenfolge angegeben wird. |
5 | allowUndefinedInResolve Dies gilt standardmäßig. Wenn diese Option auf false gesetzt ist, werden von Ihren Auflösungsfunktionen Fehler ausgegeben, wenn sie undefiniert zurückgegeben werden. |
6 | resolverValidationOptions Dies ist ein optionales Argument und akzeptiert ein Objekt mit booleschen Eigenschaften. |
7 | inheritResolversFromInterfaces Dies ist ein optionales Argument und akzeptiert ein boolesches Argument zum Überprüfen der Resolver-Objektvererbung. |
Illustration
Lassen Sie uns eine einfache Anwendung erstellen, um dieses Schema zu verstehen. Dadurch wird ein Schema zum Abfragen der Liste der Schüler vom Server erstellt. Die Studentendaten werden in einer flachen Datei gespeichert und wir verwenden ein Knotenmodul namensnotarealdb eine Datenbank fälschen und aus der Flatfile lesen.
Schritt 1 - Laden Sie die erforderlichen Abhängigkeiten für das Projekt herunter und installieren Sie sie
Erstellen Sie einen Ordner mit dem Namen schema-app. Ändern Sie Ihr Verzeichnis vom Terminal in Schema-App. Befolgen Sie dann die Schritte 3 bis 5, die im Kapitel Umgebungs-Setup erläutert wurden, um den Download und den Installationsvorgang abzuschließen.
Schritt 2 - Erstellen Sie ein Schema
Hinzufügen schema.graphql Datei im Projektordner, schema-app und fügen Sie den folgenden Code hinzu -
type Query {
greeting:String
students:[Student]
}
type Student {
id:ID!
firstName:String
lastName:String
password:String
collegeId:String
}
Das Stammverzeichnis des Schemas ist der Abfragetyp. Die Abfrage enthält zwei Felder - Begrüßung und Schüler, die einen String bzw. eine Liste der Schüler zurückgeben. Student wird als Objekttyp deklariert, da er mehrere Felder enthält. Das ID-Feld wird als nicht nullwertfähig deklariert.
Schritt 3 - Resolver erstellen
Erstellen Sie eine Datei resolvers.js im Projektordner und fügen Sie den folgenden Code hinzu -
const db = require('./db')
const Query = {
greeting:() => {
return "hello from TutorialsPoint !!!"
},
students:() => db.students.list()
}
module.exports = {Query}
Hier sind Begrüßung und Schüler die Resolver, die die Abfrage bearbeiten. students resolver functionGibt eine Liste der Schüler aus der Datenzugriffsebene zurück. Um auf Resolver-Funktionen außerhalb des Moduls zugreifen zu können, muss das Abfrageobjekt mit exportiert werdenmodule.exports.
Schritt 4 - Führen Sie die Anwendung aus
Erstellen Sie eine server.js-Datei und lesen Sie Schritt 8 im Kapitel Umgebungs-Setup. Der nächste Schritt besteht darin, den Befehl npm start im Terminal auszuführen. Der Server ist auf dem 9000-Port betriebsbereit. Hier verwenden wir GraphiQL als Client, um die Anwendung zu testen. Öffnen Sie den Browser und geben Sie die URL ein.http://localhost:9000/graphiql.
Geben Sie die folgende Abfrage in den Editor ein -
{
greeting
students {
id
firstName
lastName
}
}
Die Abfrage zeigt die Ausgabe wie unten gezeigt an -
Note- Wir können die Datei students.json durch einen RESTful-API-Aufruf ersetzen, um Schülerdaten oder sogar eine echte Datenbank wie MySQL oder MongoDB abzurufen. GraphQL wird zu einem dünnen Wrapper um Ihre ursprüngliche Anwendungsschicht, um die Leistung zu verbessern.