OpenAPI und Swagger: API Dokumentation richtig machen

Gute API-Dokumentation ist der Schlüssel zu erfolgreichen Integrationen. OpenAPI (früher Swagger) ist der Industriestandard für die Beschreibung von REST APIs. In diesem Guide lernen Sie, wie Sie APIs professionell dokumentieren und dabei Zeit sparen.

Was ist OpenAPI (früher Swagger)?

Die OpenAPI Specification (OAS) ist ein sprachunabhängiges Format zur Beschreibung von REST APIs. Eine OpenAPI-Datei definiert Endpoints, Parameter, Request/Response-Formate, Authentifizierung und mehr in einem maschinenlesbaren Format (YAML oder JSON).

Der Name „Swagger“ bezeichnet heute das Tooling rund um OpenAPI: Swagger UI zur Visualisierung, Swagger Editor zum Erstellen und Swagger Codegen zur Code-Generierung. Die Spezifikation selbst heißt seit Version 3.0 offiziell OpenAPI.

OpenAPI Specification schreiben

Eine OpenAPI-Datei besteht aus mehreren Hauptabschnitten. Hier ist ein vollständiges Beispiel einer einfachen API:

# openapi.yaml
openapi: 3.1.0
info:
  title: Produkt-API
  description: API zur Verwaltung von Produkten
  version: 1.0.0
  contact:
    name: API Support
    email: api@example.com

servers:
  - url: https://api.example.com/v1
    description: Production Server
  - url: https://staging-api.example.com/v1
    description: Staging Server

tags:
  - name: Produkte
    description: Produktverwaltung
  - name: Kategorien
    description: Kategorieverwaltung

paths:
  /products:
    get:
      tags:
        - Produkte
      summary: Alle Produkte abrufen
      description: Gibt eine paginierte Liste aller Produkte zurück
      operationId: getProducts
      parameters:
        - name: page
          in: query
          description: Seitennummer
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          description: Anzahl Produkte pro Seite
          schema:
            type: integer
            default: 20
            maximum: 100
        - name: category
          in: query
          description: Nach Kategorie filtern
          schema:
            type: string
      responses:
        '200':
          description: Erfolgreiche Antwort
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductList'
        '400':
          description: Ungültige Parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'

    post:
      tags:
        - Produkte
      summary: Neues Produkt erstellen
      operationId: createProduct
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductInput'
      responses:
        '201':
          description: Produkt erstellt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '401':
          description: Nicht authentifiziert
        '422':
          description: Validierungsfehler
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'

  /products/{id}:
    get:
      tags:
        - Produkte
      summary: Einzelnes Produkt abrufen
      operationId: getProduct
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Erfolgreiche Antwort
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '404':
          description: Produkt nicht gefunden

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

  schemas:
    Product:
      type: object
      required:
        - id
        - name
        - price
      properties:
        id:
          type: string
          format: uuid
          example: "550e8400-e29b-41d4-a716-446655440000"
        name:
          type: string
          example: "Laptop Pro 15"
        description:
          type: string
          example: "High-End Laptop für Entwickler"
        price:
          type: number
          format: float
          example: 1299.99
        category:
          type: string
          example: "Electronics"
        createdAt:
          type: string
          format: date-time

    ProductInput:
      type: object
      required:
        - name
        - price
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 255
        description:
          type: string
        price:
          type: number
          minimum: 0
        category:
          type: string

    ProductList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Product'
        pagination:
          $ref: '#/components/schemas/Pagination'

    Pagination:
      type: object
      properties:
        page:
          type: integer
        limit:
          type: integer
        total:
          type: integer
        totalPages:
          type: integer

    Error:
      type: object
      properties:
        code:
          type: string
        message:
          type: string

    ValidationError:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              field:
                type: string
              message:
                type: string

Swagger UI und Swagger Editor

Swagger UI

Swagger UI wandelt Ihre OpenAPI-Spezifikation in eine interaktive Dokumentation um. Entwickler können Endpoints direkt aus dem Browser testen, ohne Postman oder curl zu benötigen. Die Integration ist einfach:

// Express.js Integration
import swaggerUi from 'swagger-ui-express';
import YAML from 'yamljs';

const swaggerDocument = YAML.load('./openapi.yaml');

app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument, {
  customSiteTitle: 'Produkt-API Dokumentation',
  customCss: '.swagger-ui .topbar { display: none }'
}));

Swagger Editor

Der Swagger Editor unter editor.swagger.io ermöglicht das Erstellen und Validieren von OpenAPI-Spezifikationen mit Live-Vorschau. Syntax-Fehler werden sofort angezeigt, und die Dokumentation wird in Echtzeit aktualisiert. Für Teams gibt es auch VS Code Extensions mit ähnlicher Funktionalität.

API-First Design Ansatz

Beim API-First Design erstellen Sie die OpenAPI-Spezifikation vor der Implementierung. Dies hat mehrere Vorteile:

  • Frühe Abstimmung: Backend- und Frontend-Teams können parallel arbeiten
  • Konsistenz: Die Spezifikation ist die Single Source of Truth
  • Mocking: Frontend kann gegen Mock-Server entwickeln, bevor das Backend fertig ist
  • Code-Generierung: Client SDKs und Server-Stubs können automatisch erstellt werden
  • Validierung: Requests und Responses können gegen die Spec validiert werden

Hinweis: API-First bedeutet nicht, dass die Spezifikation in Stein gemeißelt ist. Sie entwickelt sich mit dem Projekt weiter, aber Änderungen werden bewusst und dokumentiert durchgeführt.

Code-Generierung aus OpenAPI

Eines der mächtigsten Features von OpenAPI ist die automatische Code-Generierung. Aus einer Spezifikation können Sie generieren:

# OpenAPI Generator installieren
npm install @openapitools/openapi-generator-cli -g

# TypeScript Client generieren
openapi-generator-cli generate \
  -i openapi.yaml \
  -g typescript-axios \
  -o ./generated/client

# Server-Stub für Node.js generieren
openapi-generator-cli generate \
  -i openapi.yaml \
  -g nodejs-express-server \
  -o ./generated/server

# Python Client generieren
openapi-generator-cli generate \
  -i openapi.yaml \
  -g python \
  -o ./generated/python-client

Der generierte Code enthält typisierte Models, API-Clients mit allen Endpoints und oft auch Validierungslogik. Dies spart nicht nur Zeit, sondern garantiert auch Konsistenz zwischen Client und Server.

Alternative Dokumentations-Tools

ToolStärkenIdeal für
Swagger UIStandard, Try-it-outInterne APIs
RedocSchönes Design, Three-PanelÖffentliche APIs
StoplightVisual Editor, Mock ServerAPI-First Teams
Readme.ioGuides + API DocsDeveloper Portals
PostmanTesting + DocsAPI-Entwicklung

Best Practices für API-Dokumentation

  • Beispiele überall: Fügen Sie zu jedem Schema und Parameter realistische Beispiele hinzu
  • Alle Fehlercodes dokumentieren: Nicht nur 200, sondern auch 400, 401, 403, 404, 422, 500
  • Schemas wiederverwenden: Nutzen Sie $ref für gemeinsame Strukturen
  • Tags sinnvoll nutzen: Gruppieren Sie Endpoints nach Ressourcen oder Features
  • Versionierung: Dokumentieren Sie API-Versionen und Breaking Changes
  • Authentifizierung klar beschreiben: Wie bekommt man einen Token? Wo sendet man ihn?

Fazit

OpenAPI ist der Standard für API-Dokumentation und bietet weit mehr als nur Dokumentation. Mit Code-Generierung, Validierung und Mock-Servern beschleunigt es den gesamten API-Entwicklungsprozess. Der initiale Aufwand für eine saubere Spezifikation zahlt sich mehrfach aus: durch bessere Kommunikation im Team, weniger Integrationsfehler und zufriedenere API-Konsumenten.

API-Entwicklung für Ihr Projekt?