Zum Hauptinhalt springen

Einführung in den OpenAPI-Standard

Der OpenAPI-Standard ist eine weit verbreitete Spezifikation zur Beschreibung von RESTful APIs. Er ermöglicht Entwicklern, die Struktur und Funktionalität eines Webservices in einer maschinenlesbaren und standardisierten Form zu dokumentieren. Dadurch wird die Integration, Wartung und Weiterentwicklung von APIs erheblich vereinfacht.

Was ist OpenAPI?

OpenAPI, früher bekannt als Swagger Specification, ist eine Spezifikation zur Beschreibung von HTTP-basierten APIs. Mit OpenAPI können Entwickler:

  • API-Endpunkte definieren
  • HTTP-Methoden (GET, POST, PUT, DELETE usw.) beschreiben
  • Anfrage- und Antwortformate spezifizieren
  • Sicherheitsmechanismen dokumentieren

Die Spezifikation kann in YAML oder JSON geschrieben werden und dient als Grundlage für die automatische Generierung von Dokumentationen, Client-Bibliotheken und Server-Stubs.

Grundstruktur einer OpenAPI Spezifikation

Eine typische OpenAPI-Datei besteht aus mehreren Hauptkomponenten:

  • openapi: Die verwendete Version der OpenAPI-Spezifikation.
  • info: Metadaten zur API wie Titel, Beschreibung und Version.
  • servers: Die Basis-URLs, unter denen die API erreichbar ist.
  • paths: Die verfügbaren API-Endpunkte und ihre Operationen.
  • components: Wiederverwendbare Schema-Definitionen, Sicherheitsschemata usw.

Einfaches Beispiel

openapi: 3.1.0
info:
title: Meine Beispiel-API
version: 1.0.0
servers:
- url: https://api.beispiel.de/v1
paths:
/benutzer:
get:
summary: Liste aller Benutzer abrufen
responses:
'200':
description: Erfolgreiche Antwort
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Benutzer'
components:
schemas:
Benutzer:
type: object
properties:
id:
type: integer
name:
type: string

Hauptkomponenten im Detail

Info

Der info-Abschnitt enthält grundlegende Informationen über die API.

info:
title: Meine Beispiel-API
description: Eine API zur Demonstration des OpenAPI-Standards.
version: 1.0.0

Servers

Definiert die Basis-URLs der API.

servers:
- url: https://api.beispiel.de/v1
description: Hauptserver

Paths

Hier werden die verfügbaren Endpunkte und ihre jeweiligen HTTP-Methoden beschrieben.

paths:
/benutzer/{id}:
get:
summary: Einzelnen Benutzer abrufen
parameters:
- name: id
in: path
required: true
description: Die ID des Benutzers
schema:
type: integer
responses:
'200':
description: Erfolgreiche Antwort
content:
application/json:
schema:
$ref: '#/components/schemas/Benutzer'

Components

Enthält wiederverwendbare Definitionen wie Schemas, Parameter und Sicherheitsmechanismen.

components:
schemas:
Benutzer:
type: object
properties:
id:
type: integer
name:
type: string
email:
type: string

Vorteile des OpenAPI-Standards

  • Automatisierte Dokumentation: Tools können aus der Spezifikation automatisch lesbare Dokumentationen erstellen.
  • Code-Generierung: Client-Bibliotheken und Server-Stubs können automatisch generiert werden.
  • Konsistenz: Einheitliche Beschreibung von APIs erleichtert die Zusammenarbeit zwischen Teams.
  • Validierung: Anfragen und Antworten können gegen die Spezifikation validiert werden.

Tools und Ökosystem

Es gibt zahlreiche Tools, die den OpenAPI-Standard unterstützen:

  • Swagger UI: Generiert eine interaktive HTML-Dokumentation aus der OpenAPI-Spezifikation.
  • Swagger Editor: Ein webbasierter Editor zum Erstellen und Bearbeiten von OpenAPI-Dateien.
  • OpenAPI Generator: Generiert Client-Bibliotheken und Server-Stubs in verschiedenen Programmiersprachen.
  • Postman: Importiert OpenAPI-Spezifikationen für API-Tests und Dokumentation.

Best Practices

Konsistente Benennung

Verwende klare und einheitliche Namen für Endpunkte, Parameter und Schemas.

Verwendung von Schemas

Definiere Datenmodelle unter components/schemas und referenziere sie in den Pfaden.

components:
schemas:
Fehler:
type: object
properties:
code:
type: integer
message:
type: string

Dokumentation von Fehlern

Beschreibe auch mögliche Fehlerantworten, nicht nur erfolgreiche Antworten.

responses:
'400':
description: Ungültige Anfrage
content:
application/json:
schema:
$ref: '#/components/schemas/Fehler'

Sicherheitsmechanismen

Definiere Authentifizierungs- und Autorisierungsmechanismen unter components/securitySchemes.

components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key

Und verwende sie in den Pfaden oder global:

security:
- ApiKeyAuth: []

Beispiel einer vollständigen OpenAPI-Spezifikation (Version 3.1.0)

Ein erweitertes Beispiel könnte so aussehen:

openapi: 3.1.0
info:
title: Aufgaben-API
version: 1.0.0
servers:
- url: https://api.aufgaben.de/v1
paths:
/aufgaben:
get:
summary: Liste aller Aufgaben abrufen
responses:
'200':
description: Erfolgreiche Antwort
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Aufgabe'
post:
summary: Neue Aufgabe erstellen
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Aufgabe'
responses:
'201':
description: Aufgabe erstellt
components:
schemas:
Aufgabe:
type: object
required:
- titel
properties:
id:
type: integer
titel:
type: string
erledigt:
type: boolean
default: false