GraphQL API mit JavaScript: Schritt-für-Schritt-Tutorial für Node.js
GraphQL ist eine leistungsstarke Abfragesprache für APIs, die von Facebook entwickelt wurde. Im Gegensatz zu REST, bei dem Sie feste Datenstrukturen erhalten, ermöglicht GraphQL dem Client, nur das anzufordern, was er benötigt. In diesem Tutorial erstellen wir eine vollständige GraphQL API in JavaScript mit Node.js und Apollo Server. Sie lernen, wie Sie den Server einrichten, ein Schema definieren, Resolver schreiben und Abfragen sowie Mutationen ausführen.
Was ist GraphQL und warum wird es benötigt?
GraphQL löst mehrere Probleme von REST APIs:
- Datenredundanz: Der Client erhält nur die Felder, die er angefordert hat.
- Mehrere Abfragen: Eine einzige GraphQL-Abfrage kann mehrere REST-Endpunkte ersetzen.
- Starke Typisierung: Das Schema definiert die Datentypen und die Beziehungen zwischen ihnen.
JavaScript (Node.js) ist die ideale Wahl für die Erstellung einer GraphQL API, dank des riesigen Paket-Ökosystems und der asynchronen Natur.
Schritt 1: Installation und Einrichtung des Projekts
Erstellen Sie ein neues Verzeichnis und initialisieren Sie das Projekt:
mkdir graphql-api-tutorialcd graphql-api-tutorialnpm init -yInstallieren Sie die erforderlichen Abhängigkeiten:
npm install apollo-server graphqlErstellen Sie die Datei index.js – dies wird der Einstiegspunkt unserer Anwendung sein.
Schritt 2: Definition des GraphQL-Schemas
Das Schema ist der Kern der GraphQL API. Es beschreibt die Datentypen und die verfügbaren Operationen (Abfragen, Mutationen, Subscriptions). Wir erstellen ein einfaches Schema zur Verwaltung von Büchern.
const { ApolloServer, gql } = require('apollo-server');
const typeDefs = gql` type Book { id: ID! title: String! author: String! year: Int }
type Query { books: [Book] book(id: ID!): Book }
type Mutation { addBook(title: String!, author: String!, year: Int): Book deleteBook(id: ID!): Book }`;Hier haben wir definiert:
- Book – ein Objekttyp mit den Feldern id, title, author, year.
- Query – der Einstiegspunkt zum Lesen von Daten (Liste der Bücher und Buch nach ID).
- Mutation – Operationen zur Datenänderung (Hinzufügen und Löschen eines Buches).
Schritt 3: Schreiben der Resolver
Resolver sind Funktionen, die die Daten für jedes Feld des Schemas zurückgeben. Wir erstellen eine fiktive Datenbank (Array von Objekten) und implementieren die Resolver.
let books = [ { id: '1', title: '1984', author: 'George Orwell', year: 1949 }, { id: '2', title: 'To Kill a Mockingbird', author: 'Harper Lee', year: 1960 },];
const resolvers = { Query: { books: () => books, book: (parent, args) => books.find(book => book.id === args.id), }, Mutation: { addBook: (parent, args) => { const newBook = { id: String(books.length + 1), title: args.title, author: args.author, year: args.year, }; books.push(newBook); return newBook; }, deleteBook: (parent, args) => { const index = books.findIndex(book => book.id === args.id); if (index === -1) return null; const deletedBook = books.splice(index, 1)[0]; return deletedBook; }, },};Beachten Sie die Struktur: Query und Mutation sind Objekte, die Resolver-Methoden enthalten. Jeder Resolver akzeptiert drei Argumente: parent (Ergebnis des übergeordneten Resolvers), args (Abfrageargumente) und context (Kontextobjekt, z. B. für die Authentifizierung).
Schritt 4: Server starten und testen
Jetzt verbinden wir das Schema und die Resolver im Apollo Server:
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => { console.log(`🚀 Server ready at ${url}`);});
Blogs
Buchempfehlungen
Lesen Sie auch
Rust im Jahr 2025: Was gibt es Neues? Ein vollständiger Überblick für Anfänger
Swift 2025: Wo beginnt man mit dem Erlernen der Sprache für iOS/macOS
Mikroservices in Java: Architektur und Praxis für Entwickler
Parallelität in Rust: Threads, Goroutinen, async/await – eine vollständige Analyse
String-Formatierung in Kotlin: 5 Ansätze für Profis