Eine REST-API mit Express bauen

Wir bauen eine vollständige REST-API mit Express: Daten anlegen, lesen, aktualisieren und löschen. Alle CRUD-Operationen Schritt für Schritt erklärt.

Teilen
Eine REST-API mit Express bauen

Jetzt wird es ernst: Wir bauen eine vollständige REST-API mit Express. Du lernst die vier grundlegenden Operationen kennen, die man unter dem Kürzel CRUD zusammenfasst – Create, Read, Update, Delete. Am Ende kannst du Daten anlegen, abrufen, ändern und löschen. Wir verwalten als Beispiel eine Liste von Büchern.

Das Grundgerüst und JSON-Middleware

Wir starten mit Express und einem Array, das unsere Daten im Speicher hält. Damit der Server JSON aus dem Anfrage-Body lesen kann, aktivieren wir express.json():

const express = require("express");
const app = express();
app.use(express.json());

let buecher = [
  { id: 1, titel: "Clean Code" },
  { id: 2, titel: "Eloquent JavaScript" },
];

app.listen(3000, () => console.log("API läuft auf Port 3000"));

Ohne express.json() wäre req.body bei POST-Anfragen leer.

Read: Daten abrufen (GET)

Mit GET liest du Daten. Wir bieten zwei Routen an: eine für alle Bücher, eine für ein einzelnes Buch per ID:

app.get("/buecher", (req, res) => {
  res.json(buecher);
});

app.get("/buecher/:id", (req, res) => {
  const buch = buecher.find((b) => b.id === Number(req.params.id));
  if (!buch) return res.status(404).json({ fehler: "Nicht gefunden" });
  res.json(buch);
});

Findet die API kein Buch, antwortet sie mit dem Statuscode 404. So weiß der Client, dass die Ressource nicht existiert.

Create: Daten anlegen (POST)

Mit POST legst du neue Einträge an. Die Daten kommen im JSON-Body der Anfrage. Wir erzeugen eine neue ID und hängen das Buch an:

app.post("/buecher", (req, res) => {
  const neuesBuch = {
    id: buecher.length + 1,
    titel: req.body.titel,
  };
  buecher.push(neuesBuch);
  res.status(201).json(neuesBuch);
});

Der Statuscode 201 Created signalisiert, dass die Ressource erfolgreich angelegt wurde. Wir senden das neue Buch direkt zurück.

Update: Daten ändern (PUT)

Mit PUT aktualisierst du einen vorhandenen Eintrag. Wir suchen das Buch und überschreiben seinen Titel:

app.put("/buecher/:id", (req, res) => {
  const buch = buecher.find((b) => b.id === Number(req.params.id));
  if (!buch) return res.status(404).json({ fehler: "Nicht gefunden" });
  buch.titel = req.body.titel;
  res.json(buch);
});

Auch hier prüfen wir zuerst, ob das Buch existiert, und antworten andernfalls mit 404.

Delete: Daten löschen (DELETE)

Mit DELETE entfernst du einen Eintrag. Wir filtern das gewählte Buch aus dem Array heraus:

app.delete("/buecher/:id", (req, res) => {
  const id = Number(req.params.id);
  const vorher = buecher.length;
  buecher = buecher.filter((b) => b.id !== id);

  if (buecher.length === vorher) {
    return res.status(404).json({ fehler: "Nicht gefunden" });
  }
  res.status(204).end();
});

Der Statuscode 204 No Content bedeutet: erfolgreich, aber es gibt nichts zurückzugeben. Genau richtig fürs Löschen.

Die API testen

Zum Testen kannst du Werkzeuge wie curl nutzen. So legst du etwa ein neues Buch an:

curl -X POST http://localhost:3000/buecher \
  -H "Content-Type: application/json" \
  -d '{"titel": "You Dont Know JS"}'

Ein einfaches curl http://localhost:3000/buecher zeigt dir danach die komplette Liste.

Fazit

Du hast eine vollständige REST-API mit allen CRUD-Operationen gebaut: GET zum Lesen, POST zum Anlegen, PUT zum Aktualisieren und DELETE zum Löschen. Dabei hast du gelernt, passende Statuscodes wie 201, 204 und 404 zu setzen und JSON im Body zu verarbeiten. In einer echten App würdest du die Daten noch in einer Datenbank speichern – aber das Grundprinzip bleibt genau dasselbe. Im nächsten Beitrag schauen wir uns an, wie Middleware deine Express-Apps noch mächtiger macht.