API Documentation

OpenAPI

OpenAPI ist eine maschinenlesbare Beschreibung einer HTTP API. Eine einzige Spezifikation kann Dokumentationen, Clients, Server und Tests generieren – sofern sie aktuell gehalten wird.

intermediate14 min readUpdated 15. Sept. 2026
openapi.yaml
yaml
# openapi.yaml
openapi: 3.1.0
info:
  title: Posts API
  version: 1.0.0
paths:
  /posts:
    get:
      summary: List posts
      responses:
        "200":
          description: A list of posts
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Post"
components:
  schemas:
    Post:
      type: object
      required: [id, title]
      properties:
        id: { type: string }
        title: { type: string }
Format
JSON oder YAML
Aktuell
OpenAPI 3.1
Struktur
Pfade und Operationen
Wiederverwendung
components und $ref
Docs
Swagger UI, Redoc
Codegen
Clients und Server

Warum es wichtig ist

Warum OpenAPI wichtig ist

Eine einzige Quelle der Wahrheit

Eine einzige Spezifikation beschreibt jeden Endpunkt, Parameter und jede Antwort, sodass Dokumentationen und Clients nicht vom Vertrag abweichen können.

Vertragsvalidierung

Die Spezifikation kann Anfragen und Antworten in Tests und zur Laufzeit validieren, wodurch Breaking Changes frühzeitig erkannt werden.

Tooling für alles

Generatoren erstellen typisierte Clients, Server-Stubs, Mocks und Dokumentationen aus derselben Datei.

Das Gesamtbild

Die drei Teile einer Spezifikation

Metadaten beschreiben die API, Pfade beschreiben die Operationen und Komponenten definieren wiederverwendbare Schemas.

Info und Server

Beschreiben

Titel, Version, Beschreibung und die Basis-URLs, unter denen die API bereitgestellt wird.

Pfade

Operieren

Jeder Pfad und jede Methode definiert Parameter, Request-Bodies und Antworten.

Komponenten

Wiederverwenden

Gemeinsam genutzte Schemas, Parameter und Antworten, die mittels $ref referenziert werden.

OpenAPI auf einen Blick

Der Kern einer Spezifikation

openapi und info

Die Version der Spezifikation und Metadaten über die API.

paths

URLs und die darauf verfügbaren Operationen.

components

Wiederverwendbare Schemas, Parameter, Antworten und Security-Schemes.

$ref

Referenziert eine Komponente, anstatt sie zu wiederholen.

security

Deklariert Authentifizierungsschemata wie Bearer-Token oder OAuth.

Dokumentation

Swagger UI und Redoc rendern eine interaktive Referenz.

Eine kurze Geschichte

Von Swagger zum Industriestandard

  1. 2010

    Swagger angekündigt

    Eine Spezifikation und Tooling zur Beschreibung von REST APIs wird veröffentlicht.

    10
  2. 2015

    Swagger 2.0

    Das Format wird weit verbreitet und das Tooling reift.

    15
  3. 2017

    OpenAPI Initiative

    Die Spezifikation wird an die Linux Foundation gespendet und umbenannt.

    17
  4. 2021

    OpenAPI 3.1

    Volle JSON Schema Kompatibilität und Webhooks werden eingeführt.

    21
  5. Heute

    Der De-facto-Standard

    Die meisten API-Tools konsumieren oder produzieren OpenAPI.

    Heute

Der vollständige Leitfaden

OpenAPI: Alles was Sie wissen müssen

Was ist OpenAPI?

OpenAPI ist eine maschinenlesbare Beschreibung einer HTTP API. In einem einzigen Dokument, geschrieben in YAML oder JSON, werden jeder Endpunkt, seine Parameter, Request-Bodies, Responses und die Authentifizierung aufgelistet. Da diese Beschreibung strukturiert ist, kann sie von verschiedenen Tools genutzt werden: Dokumentations-UIs, typisierte Clients, Server-Stubs, Mocks und Validatoren.

Swagger war der ursprüngliche Name; heute bezieht sich dieser Begriff auf das Tooling, insbesondere auf Swagger UI. Die Spezifikation selbst heißt OpenAPI und hat sich zum De-facto-Standard für die Beschreibung von REST APIs entwickelt. Wenn Sie jemals eine interaktive API-Referenz mit einem „Try it out“-Button verwendet haben, haben Sie OpenAPI genutzt.

Der Aufbau eines Dokuments

Ein OpenAPI-Dokument besteht aus einigen Top-Level-Sektionen.

# openapi.yaml
openapi: 3.1.0
info:
  title: Posts API
  version: 1.0.0
servers:
  - url: https://api.example.com/v1
paths:
  /posts:
    get:
      summary: List posts
      responses:
        "200":
          description: A list of posts
  • openapi legt die Version der Spezifikation fest.
  • info enthält den Titel, die Version und die Beschreibung.
  • servers listet die Basis-URLs auf.
  • paths beschreibt jeden Endpunkt und die dazugehörigen Operationen.
  • components enthält wiederverwendbare Elemente.

Pfade und Operationen

Jeder Pfad wird einer oder mehreren HTTP-Methoden zugeordnet, und jede Operation beschreibt deren Inputs und Outputs.

# paths.yaml
paths:
  /posts/{id}:
    get:
      summary: Get a post
      parameters:
        - name: id
          in: path
          required: true
          schema: { type: string }
      responses:
        "200":
          description: The post
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Post"
        "404":
          description: Not found

Parameter können im path, query, header oder cookie definiert werden. Request-Bodies werden mit einem Content-Type und einem Schema deklariert, und jede Response sollte ihre Status-Codes und Strukturen auflisten. Gute Zusammenfassungen und Beschreibungen machen die Spezifikation bereits an sich zu einer nützlichen Dokumentation.

Komponenten und Referenzen

Wiederverwendbarkeit ist der Schlüssel zur Wartbarkeit einer Spezifikation. Definieren Sie Shapes einmalig und referenzieren Sie diese mit $ref.

# components.yaml
components:
  schemas:
    Post:
      type: object
      required: [id, title]
      properties:
        id: { type: string }
        title: { type: string }
        publishedAt: { type: string, format: date-time }
  parameters:
    Limit:
      name: limit
      in: query
      schema: { type: integer, minimum: 1, maximum: 100 }
  responses:
    NotFound:
      description: Resource not found

Eine Änderung am Post-Schema aktualisiert jede Operation, die darauf verweist. So wird ein Auseinanderdriften verhindert, das oft bei duplizierten Definitionen auftritt.

Sicherheit

Die Authentifizierung wird einmal definiert und pro Operation zugewiesen.

# security.yaml
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

security:
  - bearerAuth: []

Tools können dann die entsprechenden Anmeldedaten in der Dokumentations-UI senden, und generierte Clients können einen Token-Parameter akzeptieren.

Dokumentation und Codegenerierung

Die Spec steuert das Tooling:

  • Swagger UI rendert eine interaktive Referenz, in der Benutzer Requests ausprobieren können.
  • Redoc rendert eine übersichtliche Dokumentationsseite mit drei Spalten.
  • openapi-generator erstellt Clients und Server-Stubs in vielen verschiedenen Sprachen.
  • openapi-typescript generiert TypeScript-Typen aus der Spec.
  • Spectral führt ein Linting der Spec durch, um Konsistenz und Style zu gewährleisten.
  • Mock-Server liefern Beispielantworten aus, sodass die Front-end-Entwicklung beginnen kann, noch bevor das Backend fertiggestellt ist.
# docs.sh
npx @redocly/cli preview-docs openapi.yaml
npx openapi-typescript openapi.yaml -o src/api-types.ts

Da alles aus einer einzigen Datei abgeleitet wird, bleiben die Dokumentation, die Clients und die Typen konsistent.

Spec-first gegenüber Code-first

Es gibt zwei Workflows:

  • Spec-first: Der Contract wird entworfen, bevor die Implementierung erfolgt. Ideal für öffentliche APIs, mehrere Konsumenten sowie die parallele Entwicklung von Front-end und Back-end. Die Spec ist hierbei die „Source of Truth“.
  • Code-first: Routen und Typen werden annotiert, woraus anschließend die Spec generiert wird. Dies hält die Spec nah an der Implementierung und vermeidet Duplikationen in typisierten Frameworks.

Beide Ansätze funktionieren. Die größte Fehlerquelle ist in beiden Fällen die manuelle Pflege der Dokumentation an einem separaten Ort, wodurch diese schleichend veraltet.

Validierung und Contract Testing

Ein OpenAPI-Dokument kann nicht nur gelesen, sondern auch erzwungen werden.

  • Request-Validierung: Eine middleware lehnt Requests ab, die nicht der Spezifikation entsprechen, sodass Handler ihren Inputs vertrauen können.
  • Response-Validierung: Tests stellen sicher, dass Responses den erklärten Schemas entsprechen.
  • Contract Testing: Clients und Server prüfen beide gegen dieselbe Spezifikation, wodurch Breaking Changes frühzeitig erkannt werden.

Hier beweist die Spezifikation ihren Wert: Sie wird zu einem ausführbaren Vertrag anstatt zu bloßer Dekoration.

Best Practices

  • Verwenden Sie pro API nur eine Spec und behandeln Sie diese als “Source of Truth”.
  • Wiederverwenden Sie Schemas, Parameter und Responses mithilfe von $ref.
  • Schreiben Sie klare Zusammenfassungen und Beschreibungen; diese bilden die Grundlage für die Dokumentation.
  • Dokumentieren Sie jeden Statuscode, den eine Operation zurückgeben kann.
  • Validieren Sie Requests und Responses gegen die Spec.
  • Generieren Sie Clients, Types und Dokumentationen, anstatt diese manuell zu schreiben.
  • Nutzen Sie einen Linter für die Spec und prüfen Sie Änderungen in Pull Requests.

Häufige Fehler

  • Manuelle Pflege der Dokumentation getrennt von der Spec.
  • Inline-Duplizierung von Schemas, bis diese voneinander abweichen.
  • Fehlende Error-Responses, wodurch Clients Fehler nicht korrekt behandeln können.
  • Verwendung vager Namen und Beschreibungen, die den Konsumenten nicht weiterhelfen.
  • Zulassen einer Diskrepanz (Drift) zwischen der Spec und der Implementierung.
  • Verzicht auf Validierung, wodurch der Hauptvorteil des Contracts verloren geht.

Wie geht es weiter?

OpenAPI macht eine API zu einem Vertrag, den sowohl Tools als auch Menschen nutzen können. Bauen Sie diese auf Basis eines soliden REST-Designs auf, entwickeln Sie sie sorgfältig mittels API-Versioning weiter und richten Sie sie am HTTP-Guide aus. Beschreiben Sie anschließend einen Endpunkt, den Sie bereits implementiert haben, und generieren Sie daraus einen Client.

Schemas wiederverwenden

Definiere ein Modell einmal und referenziere es. Das Duplizieren von Inline-Schemas führt zwangsläufig zu Inkonsistenzen.

Bevorzugt
components:
  schemas:
    Post:
      type: object
      properties:
        id: { type: string }

# used by many operations
schema:
  $ref: "#/components/schemas/Post"
Vermeiden
# the same shape copied
# into every operation,
# slowly drifting apart

Dokumentation aktuell halten

Generiere die Dokumentation aus der Spezifikation oder die Spezifikation aus typisiertem Code. Handgeschriebene Dokumentationen veralten immer.

Bevorzugt
# spec is the source of truth
npx @redocly/cli preview-docs openapi.yaml
npx openapi-generator-cli generate \
  -i openapi.yaml -g typescript-fetch
Vermeiden
# manually maintained docs
# in a wiki, updated by hand,
# usually out of date

Abwägungen

Lohnt sich die Pflege der Spezifikation?

OpenAPI zahlt sich aus, wenn die Spezifikation generiert oder erzwungen wird, und wird zum Ballast, wenn sie ein separates Dokument ist, das niemand aktualisiert.

Strengths

  • Ein Vertrag für alles

    Dokumentation, Clients, Mocks und Validierung lesen dieselbe Datei, sodass sie nicht auseinanderdriften können.

  • Bessere Zusammenarbeit

    Eine gemeinsame, überprüfbare Spezifikation lässt Frontend, Backend und Partner die Schnittstelle festlegen, bevor Code geschrieben wird.

  • Maschinell prüfbar

    Linter und Vertragstests erkennen Breaking Changes und Inkonsistenzen in der CI statt in der Produktion.

Trade-offs

  • Ein weiteres Artefakt, das korrekt bleiben muss

    Eine handgeschriebene Spezifikation driftet von der Implementierung ab. Wird sie nicht generiert oder getestet, wird sie still und leise falsch.

  • Ausführlich für einfache APIs

    YAML-Beschreibungen und $ref-Indirektion verursachen Aufwand, den eine kleine interne API vielleicht nie einspielt.

  • Codegenerierung kann starr sein

    Generierte Clients sind praktisch, bis man eigenes Verhalten braucht, und eine Neugenerierung kann große Diffs verursachen.

Häufig gestellte Fragen

Häufig gestellte Fragen

Keep learning

Related topics from the roadmap.

$ Lernen Sie jetzt

Bereit, OpenAPI / Swagger zu lernen?

Unser interaktives Tutorial führt Sie Schritt für Schritt durch OpenAPI / Swagger — mit Quizzen und echtem Code, den Sie im Browser ausführen können.