GraphQL-Bibliothek für JavaScript (Node.js): Vollständiger Leitfaden zu Apollo Server und Tools

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

GraphQL-Bibliothek für Node.js: Apollo Server und Entwicklungstools



GraphQL ist eine Abfragesprache für APIs, die es Clients ermöglicht, nur die Daten anzufordern, die sie benötigen. Für die Entwicklung mit Node.js ist die beliebteste Bibliothek Apollo Server. Sie bietet einen vollständigen Satz an Werkzeugen zum Erstellen, Testen und Bereitstellen von GraphQL-APIs. In diesem Artikel werden wir die wichtigsten Komponenten, Ansätze und Codebeispiele im Detail besprechen.



Was ist Apollo Server?

Apollo Server ist eine Open-Source-Bibliothek, mit der Sie schnell einen GraphQL-Server unter Node.js erstellen können. Sie unterstützt mehrere Transporte (HTTP, WebSocket) und lässt sich leicht in Frameworks (Express, Koa, Fastify) integrieren. Hauptfunktionen:

  • Automatische Generierung der Dokumentation über GraphQL Playground.
  • Unterstützung von Subscriptions über WebSocket.
  • Mechanismus zum Caching und Zusammenführen von Daten (data loaders).
  • Flexibles Middleware-System für Authentifizierung und Autorisierung.


Installation und grundlegende Einrichtung

Installieren Sie zunächst die Pakete apollo-server und graphql:

npm install apollo-server graphql


Erstellen Sie einen einfachen Server, der eine Begrüßung zurückgibt:

const { ApolloServer, gql } = require('apollo-server');

// Schema definieren (SDL)const typeDefs = gql` type Query { hello: String }`;

// Resolver — Funktionen, die Daten zurückgebenconst resolvers = { Query: { hello: () => 'Hello, GraphQL!', },};

// Server startenconst server = new ApolloServer({ typeDefs, resolvers });server.listen().then(({ url }) => { console.log(`🚀 Server läuft unter ${url}`);});


Datentypen und Schemas

In GraphQL definiert das Schema alle verfügbaren Typen und Operationen. Grundlegende Typen:

  • String, Int, Float, Boolean, ID — skalare Typen.
  • [Type] — Liste von Objekten.
  • type — benutzerdefiniertes Objekt.
  • input — Typ für Eingabeparameter von Mutationen.


Beispielschema für einen Blog:

type User {  id: ID!  name: String!  posts: [Post!]!}

type Post { id: ID! title: String! content: String! author: User!}

type Query { user(id: ID!): User posts(limit: Int): [Post!]!}

type Mutation { createUser(name: String!): User!}


Resolver: Verbindung von Schema und Daten

Jedes Feld des Schemas muss einen entsprechenden Resolver haben. Resolver können Daten aus einer Datenbank (MongoDB, PostgreSQL), externen APIs oder statischen Arrays abrufen.

const users = [  { id: '1', name: 'Anna' },  { id: '2', name: 'Boris' },];

const posts = [ { id: '10', title: 'GraphQL für Anfänger', content: '...', authorId: '1' }, { id: '20', title: 'Node.js Tipps', content: '...', authorId: '2' },];

const resolvers = { Query: { user: (_, { id }) => users.find(u => u.id === id), posts: (_, { limit }) => limit ? posts.slice(0, limit) : posts, }, Mutation: { createUser: (_, { name }) => { const newUser = { id: String(users.length + 1), name }; users.push(newUser); return newUser; }, }, User: { posts: (parent) => posts.filter(p => p.authorId === parent.id), },};


Code-First-Ansatz mit TypeGraphQL

Für größere Projekte ist der Code-First-Ansatz praktischer, bei dem das Schema aus TypeScript-Klassen generiert wird. Die Bibliothek type-graphql ermöglicht es, Code zu schreiben, der gleichzeitig Typ und Resolver ist.

npm install type-graphql reflect-metadata class-validator


Beispiel einer Entitätsklasse:

import { ObjectType, Field,                    

Empfehlungen