Use Cases

API-Entwicklung mit Claude Code beschleunigen: Vom Design bis zum Test

API-Entwicklung mit Claude Code beschleunigen. Vom Design bis zum Test. Mit praktischen Codebeispielen.

Engpässe in der API-Entwicklung beseitigen

Die API-Entwicklung umfasst viele repetitive Aufgaben – Endpoint-Design, Validierung, Fehlerbehandlung und Testerstellung. Claude Code kann all diese Aufgaben schnell und effizient bewältigen.

Batch-Generierung von Endpoints

Lassen Sie Claude Code alle CRUD-Endpoints auf einmal erstellen.

> Erstelle eine RESTful API für die folgende Ressource.
> Framework: Express + TypeScript.
>
> Ressource: Task
> Felder: id, title, description, status, dueDate, createdAt, updatedAt
> Endpoints: GET /tasks, GET /tasks/:id, POST /tasks, PUT /tasks/:id, DELETE /tasks/:id
> Validierung: mit zod
> Antwortformat: { data, meta, error }

Beispiel für generierten Code

import { Router, Request, Response } from "express";
import { z } from "zod";

const TaskSchema = z.object({
  title: z.string().min(1).max(200),
  description: z.string().optional(),
  status: z.enum(["todo", "in_progress", "done"]).default("todo"),
  dueDate: z.string().datetime().optional(),
});

const router = Router();

router.get("/tasks", async (req: Request, res: Response) => {
  const page = Number(req.query.page) || 1;
  const limit = Number(req.query.limit) || 20;
  const offset = (page - 1) * limit;

  const tasks = await taskRepository.findAll({ offset, limit });
  const total = await taskRepository.count();

  res.json({
    data: tasks,
    meta: { page, limit, total, totalPages: Math.ceil(total / limit) },
  });
});

router.post("/tasks", async (req: Request, res: Response) => {
  const parsed = TaskSchema.safeParse(req.body);
  if (!parsed.success) {
    return res.status(400).json({
      error: { message: "Validierungsfehler", details: parsed.error.issues },
    });
  }

  const task = await taskRepository.create(parsed.data);
  res.status(201).json({ data: task });
});

export default router;

Generierung aus OpenAPI-Spezifikationen

Wenn eine bestehende API-Spezifikation vorliegt, können Sie diese zur Generierung der Implementierung übergeben.

> Implementiere alle Endpoints basierend auf den Definitionen in openapi.yaml.
> Passe die Validierung an die Schema-Definitionen an.
> Erstelle auch Tests für jeden Endpoint.

Automatische Generierung von API-Tests

Die gleichzeitige Erstellung von Implementierung und Tests gewährleistet Qualität.

> Erstelle Tests für den POST /tasks-Endpoint.
> Decke Erfolgsfälle, Fehlerfälle und Grenzwerte ab.
import request from "supertest";
import { app } from "../app";

describe("POST /tasks", () => {
  it("gibt 201 mit gültigen Daten zurück", async () => {
    const res = await request(app)
      .post("/tasks")
      .send({ title: "Testaufgabe", status: "todo" });

    expect(res.status).toBe(201);
    expect(res.body.data.title).toBe("Testaufgabe");
    expect(res.body.data.id).toBeDefined();
  });

  it("gibt 400 zurück wenn der Titel leer ist", async () => {
    const res = await request(app)
      .post("/tasks")
      .send({ title: "", status: "todo" });

    expect(res.status).toBe(400);
    expect(res.body.error).toBeDefined();
  });

  it("gibt 400 bei ungültigem Status zurück", async () => {
    const res = await request(app)
      .post("/tasks")
      .send({ title: "Aufgabe", status: "ungültig" });

    expect(res.status).toBe(400);
  });
});

Für detaillierte Testdesign-Strategien siehe den Kompletten Leitfaden für Teststrategien.

Middleware generieren

Sie können auch gängige Middleware für Authentifizierung, Rate Limiting, Logging und mehr generieren.

> Erstelle eine JWT-Authentifizierungs-Middleware.
> - Token aus dem Authorization-Header extrahieren
> - Ablaufzeit prüfen
> - Dekodierte Benutzerinfo auf req.user setzen
> - Bei Fehlern passenden HTTP-Status zurückgeben
import { Request, Response, NextFunction } from "express";
import jwt from "jsonwebtoken";

interface AuthRequest extends Request {
  user?: { id: string; email: string; role: string };
}

export function authenticate(
  req: AuthRequest,
  res: Response,
  next: NextFunction
) {
  const header = req.headers.authorization;

  if (!header?.startsWith("Bearer ")) {
    return res.status(401).json({ error: { message: "Authentifizierung erforderlich" } });
  }

  try {
    const token = header.slice(7);
    const decoded = jwt.verify(token, process.env.JWT_SECRET!) as AuthRequest["user"];
    req.user = decoded;
    next();
  } catch (err) {
    if (err instanceof jwt.TokenExpiredError) {
      return res.status(401).json({ error: { message: "Token abgelaufen" } });
    }
    return res.status(403).json({ error: { message: "Ungültiges Token" } });
  }
}

Einheitliche Fehlerbehandlung

Für die Gestaltung konsistenter Fehlerantworten in Ihrer gesamten API siehe Fehlerbehandlungs-Design-Patterns.

Datenbankintegration

Sie können auch die Repository-Schicht und Migrationen gleichzeitig erstellen. Zur Automatisierung von Datenbankoperationen siehe DB-Migrationsautomatisierung.

Zusammenfassung

Der Schlüssel zur API-Entwicklung mit Claude Code liegt in der Definition klarer Spezifikationen und umfassender Anweisungen. Überlassen Sie Claude Code die repetitiven CRUD-Aufgaben, damit Sie sich auf das Business-Logic-Design konzentrieren können.

Für API-Best-Practices verweisen wir auf die offizielle Anthropic-Dokumentation und den offiziellen Express-Leitfaden.

#Claude Code #API development #REST API #Express #backend