GraphQL-Bibliothek für JavaScript (Node.js): Vollständiger Leitfaden
GraphQL ist eine Abfragesprache und Laufzeitumgebung für APIs, die von Facebook entwickelt wurde. Im Node.js-Ökosystem ist das Paket graphql die wichtigste Bibliothek für die Arbeit mit GraphQL. Es bietet alle notwendigen Werkzeuge zum Erstellen, Validieren und Ausführen von GraphQL-Abfragen. Diese Bibliothek ist die Grundlage für beliebte Frameworks wie Apollo Server, Express-GraphQL und andere.
Was ist GraphQL und warum wird es benötigt?
Im Gegensatz zu REST-APIs, bei denen jeder Endpunkt eine feste Datenstruktur zurückgibt, ermöglicht GraphQL dem Client, nur die Felder anzufragen, die er benötigt. Dies löst das Problem des Over-fetching (Abrufen unnötiger Daten) und Under-fetching (unzureichende Daten). Die Hauptvorteile:
- Flexibilität der Abfragen: Der Client bestimmt selbst, welche Daten abgerufen werden.
- Einheitlicher Einstiegspunkt: Alle Abfragen gehen an einen Endpunkt (z. B.
/graphql). - Strenge Typisierung: Das GraphQL-Schema definiert Datentypen und ihre Beziehungen.
- Introspection: Dokumentation und Testwerkzeuge (GraphiQL) können automatisch generiert werden.
Installation der GraphQL-Bibliothek für Node.js
Installieren Sie das Paket zunächst über npm oder yarn:
npm install graphqlSie benötigen außerdem einen HTTP-Server, z. B. express, und Middleware wie express-graphql (oder Apollo Server). Die Bibliothek graphql selbst ist jedoch der Kern.
Erstellung des ersten Schemas und Resolvers
Das Schema ist eine Beschreibung der Datentypen und verfügbaren Operationen (Abfragen, Mutationen). Resolver sind Funktionen, die die eigentliche Logik zum Abrufen von Daten ausführen.
Beispiel eines einfachen Schemas mit einem Typ User und einer Abfrage user:
const { graphql, buildSchema } = require('graphql');
// Schema definierenconst schema = buildSchema(` type User { id: ID! name: String email: String }
type Query { user(id: ID!): User }`);
// Daten (in einem echten Projekt wäre dies eine Datenbank)const users = [ { id: '1', name: 'Ivan', email: 'ivan@example.com' }, { id: '2', name: 'Maria', email: 'maria@example.com' }];
// Resolverconst root = { user: ({ id }) => users.find(user => user.id === id)};
// Abfrage ausführengraphql({ schema, source: '{ user(id: "1") { name email } }', rootValue: root}).then(response => { console.log(JSON.stringify(response)); // {"data":{"user":{"name":"Ivan","email":"ivan@example.com"}}}});Datentypen in GraphQL
Die Bibliothek graphql unterstützt alle standardmäßigen skalaren Typen:
String— Zeichenkette;Int— ganze Zahl;Float— Gleitkommazahl;Boolean— boolescher Wert;ID— eindeutige Kennung (wird als Zeichenkette serialisiert).
Sie können auch eigene Objekttypen, Aufzählungen (enum), Listen ([Type]) und nicht-nullbare Felder (Type!) erstellen.
Mutationen und Abonnements
Mutationen werden verwendet, um Daten zu ändern (analog zu POST/PUT/DELETE in REST). Abonnements ermöglichen Echtzeit-Updates über WebSocket.
Beispiel einer Mutation zum Hinzufügen eines Benutzers:
const schema = buildSchema(` type Mutation { addUser(name: String!, email: String!): User }`);
const root = { addUser: ({ name, email }) => { const newUser = { id: String(users.length + 1), name, email }; users.push(newUser); return newUser; }};
// Mutation ausführengraphql({ schema, source: 'mutation { addUser(name: "Petr", email: "petr@example.com") { id name } }', rootValue: root}).then(console. Auch in der Bibliothek
Carter für C# (.NET): Vollständige Anleitung mit Beispielen
GraphQL-Bibliothek für JavaScript (Node.js): Vollständiger Leitfaden zu Apollo Server und Tools
Generierung von PDF-Berichten in C++: Die Bibliothek libHaru
Mongoose für JavaScript (Node.js): vollständiges Handbuch mit Beispielen
CryptoKit für Swift: Vollständiges Tutorial mit Codebeispielen