GraphQL API mit JavaScript: Schritt-für-Schritt-Tutorial in der Praxis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in GraphQL und seine Vorteile

\n\n

GraphQL ist eine Abfragesprache und Laufzeitumgebung für APIs, entwickelt von Facebook. Im Gegensatz zu REST, wo Sie feste Datenstrukturen erhalten, ermöglicht GraphQL dem Client, nur das anzufragen, was er benötigt. Das macht APIs flexibler und effizienter.

\n\n

In diesem Schritt-für-Schritt-Tutorial erstellen wir eine vollwertige GraphQL API mit JavaScript unter Verwendung von Node.js. Sie lernen, den Server einzurichten, Schemas zu definieren, Abfragen und Mutationen zu verarbeiten. Am Ende des Artikels haben Sie eine funktionierende API, bereit zur Integration in jedes Projekt.

\n\n

1. Projekteinrichtung und Installation der Abhängigkeiten

\n\n

Zunächst erstellen wir ein neues Node.js-Projekt und installieren die erforderlichen Pakete. Wir verwenden apollo-server – eine beliebte Bibliothek zur Erstellung von GraphQL-Servern.

\n\n

Schritt 1: Projektinitialisierung

\n
mkdir graphql-tutorial\ncd graphql-tutorial\nnpm init -y
\n\n

Schritt 2: Installation von Apollo Server und GraphQL

\n
npm install apollo-server graphql
\n\n

Nach der Installation erstellen wir die Hauptdatei index.js, in der sich unser Server befinden wird.

\n\n

2. Erstellung eines grundlegenden GraphQL-Servers

\n\n

Jetzt schreiben wir einen minimalen Server, der Anfragen entgegennimmt und Antworten zurückgibt. Dazu definieren wir ein Schema und Resolver.

\n\n

Schritt 1: Definition des Datentyps

\n

Wir erstellen einen einfachen Typ Book mit den Feldern id, title und author.

\n\n
const { ApolloServer, gql } = require('apollo-server');\n\n// GraphQL Schema\nconst typeDefs = gql`\n  type Book {\n    id: ID!\n    title: String!\n    author: String!\n  }\n\n  type Query {\n    books: [Book]\n    book(id: ID!): Book\n  }\n`;\n\n// Beispieldaten (in einem echten Projekt – Datenbank)\nconst books = [\n  { id: '1', title: 'Krieg und Frieden', author: 'Leo Tolstoi' },\n  { id: '2', title: 'Verbrechen und Strafe', author: 'Fjodor Dostojewski' },\n  { id: '3', title: 'Der Meister und Margarita', author: 'Michail Bulgakow' }\n];\n\n// Resolver – Funktionen, die Daten zurückgeben\nconst resolvers = {\n  Query: {\n    books: () => books,\n    book: (parent, args) => books.find(book => book.id === args.id)\n  }\n};\n\n// Servererstellung\nconst server = new ApolloServer({ typeDefs, resolvers });\n\n// Serverstart\nserver.listen().then(({ url }) => {\n  console.log(`🚀  Server bereit unter: ${url}`);\n});
\n\n

Schritt 2: Start und Test

\n

Führen Sie den Befehl node index.js aus und öffnen Sie http://localhost:4000 im Browser. Sie sehen den GraphQL Playground – ein Werkzeug zum Testen von Abfragen.

\n\n

Versuchen Sie eine einfache Abfrage:

\n
{\n  books {\n    title\n    author\n  }\n}
\n\n

Die Antwort sollte eine Liste der Bücher mit den angegebenen Feldern enthalten.

\n\n

3. Hinzufügen von Mutationen und Erweiterung des Schemas

\n\n

Jetzt fügen wir die Möglichkeit hinzu, Daten über Mutationen zu ändern. Dies ermöglicht das Erstellen, Aktualisieren und Löschen von Einträgen.

\n\n

Schritt 1: Definition von Mutationen im Schema

\n
const typeDefs = gql`\n  type Book {\n    id: ID!\n    title: String!\n    author: String!\n  }\n\n  input BookInput {\n    title: String!\n    author: String!\n  }\n\n  type Query {\n    books: [Book]\n    book(id: ID!): Book\n  }\n\n  type Mutation {\n    addBook(input: BookInput!): Book\n    deleteBook(id: ID!): Book\n  }\n`;
\n\n

Schritt 2: Implementierung von Resolvern für Mutationen

\n
const resolvers = {\n  Query: {\n    books: () => books,\n    book: (parent, args) => books.find(book => book.id === args.id)\n  },\n  Mutation: {\n    addBook: (parent, args) => {\n      const newBook = {\n        id: String(books.length + 1),\n        title: args.input.title,\n        author: args.input.author\n      };\n      books.push(newBook);\n      return newBook;\n    },\n    deleteBook: (parent, args) => {\n      const index = books.findIndex(book => book.id                

Blogs

Buchempfehlungen