Backend

REST API Design Grundlagen

APIs die Entwickler lieben werden

Eine schlecht designte API macht das Frontend zur Hoelle. Gute REST APIs folgen klaren Konventionen fuer URLs, HTTP-Methoden und Statuscodes. Einmal richtig gelernt, sparst du dir hunderte Stunden Debugging.

Pro-Tip — Der schnelle Weg
Benenne Ressourcen immer im Plural: /users, /posts, /products. Nicht /getUser oder /createPost. Die HTTP-Methode sagt schon was passiert.
Seite 1
1

RESTful URL-Struktur

URLs beschreiben Ressourcen, nicht Aktionen. Die HTTP-Methode bestimmt die Aktion. Halte die Hierarchie flach und logisch.

GET /api/users → Liste aller User
GET /api/users/123 → Einzelner User
POST /api/users → Neuer User erstellen
PUT /api/users/123 → User komplett aktualisieren
PATCH /api/users/123 → User teilweise aktualisieren
DELETE /api/users/123 → User loeschen
2

Richtige Statuscodes nutzen

Gib dem Client klare Signale was passiert ist. Nicht alles ist 200 OK oder 500 Error. Hier sind die wichtigsten Codes.

200 → Erfolg (GET, PUT, PATCH)
201 → Erstellt (POST)
204 → Kein Content (DELETE)
400 → Ungueltige Eingabe
401 → Nicht authentifiziert
403 → Keine Berechtigung
404 → Nicht gefunden
409 → Konflikt (z.B. Duplikat)
429 → Zu viele Requests
500 → Server-Fehler
3

Pagination einbauen

Gib nie alle Datensaetze auf einmal zurueck. Nutze Query-Parameter fuer Pagination und gib Metadaten mit.

// GET /api/posts?page=2&limit=20
export async function GET(request: Request) {
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page') || '1');
const limit = parseInt(searchParams.get('limit') || '20');
const offset = (page - 1) * limit;


const [posts, total] = await Promise.all([
db.post.findMany({ skip: offset, take: limit }),
db.post.count(),
]);


return Response.json({
data: posts,
meta: { page, limit, total, totalPages: Math.ceil(total / limit) },
});
}
4

Konsistente Error-Responses

Jeder Fehler sollte das gleiche Format haben damit der Client einheitlich damit umgehen kann.

// Einheitliches Error-Format
function apiError(message: string, status: number, details?: unknown) {
return Response.json(
{ error: { message, status, details } },
{ status }
);
}


// Nutzung
return apiError('User nicht gefunden', 404);
return apiError('Validierung fehlgeschlagen', 400, zodErrors);
Seite 2
Warum das funktioniert
  • Klare Konventionen bedeuten weniger Kommunikation zwischen Frontend und Backend
  • Einheitliche Error-Responses machen Client-seitiges Error-Handling trivial
  • Pagination verhindert Performance-Probleme bei wachsenden Datensaetzen
  • RESTful URLs sind selbsterklaerend und brauchen weniger Dokumentation
Tipps
  • Versioned deine API mit /api/v1/ wenn du Breaking Changes planst
  • Nutze Query-Parameter fuer Filtering: /api/posts?status=published&author=123
  • Gib bei POST immer das erstellte Objekt zurueck, spart dem Client einen Extra-Request
  • Dokumentiere deine API mit OpenAPI/Swagger, Claude Code kann das generieren
Seite 3
Bereit für den nächsten Schritt?

KIWorld VibeCoding Masterclass

Du willst nicht nur einzelne Tools einrichten, sondern wirklich lernen wie du mit KI komplette Apps, Websites und SaaS-Produkte baust? Über 700 Videos — von Anfänger bis Fortgeschritten — in jedem Bereich. Von der Idee bis zum fertigen Produkt, ohne eine Zeile Code selbst zu schreiben.

Jetzt Masterclass ansehen