← Zur Startseite

API – Application Programming Interface

Eine API ist der „Vertrag“ zwischen Systemen: Sie definiert, welche Funktionen angeboten werden, wie man sie aufruft und welche Datenformate dabei gelten. Gute APIs reduzieren Integrationsaufwand, erhöhen Sicherheit und machen Systeme skalierbar – schlechte APIs erzeugen dauerhaft Kosten.

Merksatz: Eine API ist nicht „nur ein Endpoint“ – sie ist ein stabiler Vertrag, der Änderungen kontrollierbar macht.

1) Grundlagen: Was genau ist eine API?

„API“ (Application Programming Interface) bezeichnet eine definierte Schnittstelle, über die Software miteinander interagiert. Das kann ein Web-Service (HTTP), eine Bibliothek (z.B. .NET-Assembly), ein Betriebssystem-Interface oder auch ein internes Service-Protokoll sein.

2) API-Typen: REST, GraphQL, gRPC & Co.

In der Praxis dominieren drei Stile. Keiner ist „immer besser“ – entscheidend ist die Systemlandschaft und der Use Case.

Stil Stärken Typische Nutzung Risiken/Trade-offs
REST (HTTP/JSON) Einfach, breit unterstützt, caching-freundlich, gut debuggbar Public APIs, klassische Web-Backends, Microservices Over/Under-Fetching möglich, viele Endpoints
GraphQL Client bestimmt Datenform, weniger Requests, stark für komplexe UI Apps mit sehr variablen Datenbedarfen Caching/Rate-Limits komplexer, Query-Kosten kontrollieren
gRPC (Protobuf) Sehr schnell, starke Typisierung, Streaming, guter Vertrag Interne Service-to-Service-Kommunikation Browser-Unterstützung indirekt, Tooling/Observability beachten

3) REST in der Praxis: Ressourcen, Methoden, Statuscodes

REST modelliert Dinge als Ressourcen (z.B. /users, /orders). Die HTTP-Methoden drücken aus, was passieren soll:

Statuscodes – konsistent bleiben

Konsistente Statuscodes sind ein Qualitätsmerkmal. Clients müssen sich darauf verlassen können, was ein Code bedeutet.

Code Bedeutung Wann verwenden?
200OKErfolgreiches Lesen/Ändern mit Response
201CreatedRessource wurde erstellt (Location-Header sinnvoll)
204No ContentErfolg ohne Response-Body
400Bad RequestRequest syntaktisch/strukturell falsch
401UnauthorizedKeine/ungültige Authentifizierung
403ForbiddenAuthentifiziert, aber keine Berechtigung
404Not FoundRessource existiert nicht
409ConflictKonflikt (z.B. Versionskonflikt, Duplicate)
429Too Many RequestsRate Limit erreicht
500Server ErrorUnerwarteter interner Fehler (ohne Details zu leaken)

4) Authentifizierung & Autorisierung

API-Sicherheit beginnt nicht bei „Token prüfen“, sondern beim Gesamtdesign: Transport, Identität, Rechte, Input-Validation, Limits und Logging.

Gängige Verfahren

Wichtig: Authentifizierung = „Wer bist du?“. Autorisierung = „Darfst du das?“. Beides getrennt denken.

5) Versionierung: Stabil bleiben trotz Weiterentwicklung

Eine API ist ein Vertrag. Breaking Changes ohne Migrationspfad zerstören Vertrauen und erzeugen Support-Aufwand. Saubere Versionierung sorgt dafür, dass du erweitern kannst, ohne Integrationen zu brechen.

Ergänzend: Deprecation-Policy (Fristen), Changelog, Migrationsguide, Vertragstests (Consumer-Driven Contracts).

6) Fehlerhandling: Einheitlich, maschinenlesbar, support-freundlich

Fehlermeldungen müssen für Menschen verständlich und für Clients stabil parsebar sein. Bewährt ist ein standardisiertes Fehlerobjekt mit Code, Message, Details, Correlation ID.

HTTP/1.1 400 Bad Request Content-Type: application/json { "error": { "code": "VALIDATION_FAILED", "message": "Ein Feld ist ungültig.", "details": [ { "field": "email", "issue": "Ungültiges Format" } ], "correlationId": "b6f1c3e5-7a2b-4f4c-9b9f-9a1d4c2d3b10" } }

7) Pagination, Filtering, Sorting – ohne Performance-Fallen

Sobald Listen groß werden, brauchst du klare Regeln. Für stabile Ergebnisse ist Cursor-Pagination oft besser als Offset.

8) Rate Limits, Timeouts, Idempotency

Robustheit entsteht durch Grenzen. Ohne Limits können einzelne Clients das System destabilisieren.

9) Caching: Leistung gewinnen, ohne falsche Daten auszuliefern

HTTP bietet starke Mechanismen: Cache-Control, ETag, If-None-Match. Für Read-heavy Endpoints kann das massiv Kosten senken.

10) Security-Baseline (Minimum, das sitzen muss)

11) Dokumentation: OpenAPI/Swagger als Vertrag

Eine gute API ist dokumentiert, versioniert und testbar. OpenAPI/Swagger macht Endpoints, Modelle, Auth-Schemes und Beispiele maschinenlesbar – und ermöglicht Mocking sowie automatisierte Tests.

12) Monitoring & Betrieb: Observability entscheidet über Supportkosten

In Produktion zählen Metriken, Logs und Traces. Mit Correlation IDs und verteiltem Tracing findest du Ursachen statt Symptome.

13) Codebeispiele

Beispiel: REST Call via cURL

curl -sS \ -H "Authorization: Bearer " \ -H "Accept: application/json" \ "https://api.example.com/v1/orders?status=active&limit=25"

Beispiel: .NET (Minimal API) – Endpoint mit Validation & Error-Shape

app.MapPost("/v1/orders", (CreateOrderDto dto, HttpContext ctx) => { if (string.IsNullOrWhiteSpace(dto.CustomerId)) return Results.BadRequest(new { error = new { code = "VALIDATION_FAILED", message = "CustomerId ist erforderlich.", correlationId = ctx.TraceIdentifier } }); // TODO: persist order return Results.Created($"/v1/orders/{id}", new { id = "ord_123" }); });

Beispiel: Node.js (Express) – Rate Limit + JSON Errors

import rateLimit from "express-rate-limit"; import express from "express"; const app = express(); app.use(express.json()); app.use(rateLimit({ windowMs: 60_000, max: 60, standardHeaders: true, legacyHeaders: false })); app.get("/v1/health", (req, res) => { res.json({ status: "ok" }); });

14) Typische Fehler (und wie du sie vermeidest)

Fazit

Eine professionelle API ist ein stabiler Vertrag mit sauberer Versionierung, konsistentem Fehlerhandling, klarer Auth/Autorisierung, messbarer Performance und guter Dokumentation. Wenn diese Grundlagen sitzen, werden Systeme wartbarer, Integrationen schneller und Betriebskosten deutlich niedriger.

Stand: 2026-02-09 · RainbowApex