Skip to content
IRC-CodingIRC-Coding
REST APIAPI VersionierungURI VersioningHeader VersioningContent NegotiationAPI Deprecation

REST API Versionierung: Strategien, Best Practices und praktische Umsetzung

Lerne REST API Versionierung: URI Versioning, Header Versioning, Content Negotiation, Deprecation und Best Practices für stabile und wartbare APIs.

S

schutzgeist

6 min read
REST API Versionierung: Strategien, Best Practices und praktische Umsetzung

REST API Versionierung: Strategien und Best Practices

REST API Versionierung sorgt dafür, dass bestehende Clients auch bei Änderungen der API weiterhin stabil funktionieren können.

Kompakte Beschreibung

REST API Versionierung ist die gezielte Steuerung von Änderungen an einer Schnittstelle, damit bestehende Clients nicht durch neue Features oder veränderte Datenformate beeinträchtigt werden. Es gibt verschiedene Strategien, die am häufigsten im Pfad, über Header oder über Content Negotiation umgesetzt werden. Eine gute Versionierungsstrategie definiert klare Regeln für inkompatible und kompatible Änderungen, kommuniziert Deprecations früh und ermöglicht einen geordneten Übergang von einer Version zur nächsten. Versionierung ist kein technisches Detail, sondern ein wesentlicher Bestandteil des API-Lifecycle-Managements und der langfristigen Beziehung zu den Nutzern der Schnittstelle.

Wichtige REST API Komponenten

Inkompatible und kompatible Änderungen unterscheiden

Nicht jede Änderung an einer API erfordert eine neue Version. Das Hinzufügen optionaler Felder, neuer Endpunkte oder zusätzlicher Filter ist kompatibel und kann ohne neue Version eingeführt werden. Inkompatible Änderungen wie das Entfernen von Feldern, das Ändern von Datentypen oder das Verschieben von Endpunkten erfordern eine neue Version, damit bestehende Clients nicht brechen.

URI Versioning

Beim URI Versioning wird die Version direkt in die URL eingebettet, beispielsweise /v1/customers oder /api/v2/orders. Das ist die einfachste und verbreitetste Variante, weil die Version auf einen Blick sichtbar ist und problemlos in Links, Logs und Caching verwendet werden kann.

Header Versioning

Beim Header Versioning wird die Version über einen eigenen Header wie api-version: 1 oder Accept-Version: v2 übermittelt. Die URL bleibt sauber, aber die Version ist für Betrachter der URL nicht direkt ersichtlich. Diese Variante ist gut geeignet, wenn die API-Oberfläche unabhängig von der URL bleiben soll.

Content Negotiation

Bei der Content Negotiation teilt der Client über den Accept Header mit, welche Version er erwartet, beispielsweise Accept: application/vnd.shop.v1+json. Das ist sehr flexibel, aber auch komplexer in der Implementierung und für weniger erfahrene Nutzer schwerer zu verstehen.

Semantische Versionierung

Semantische Versionierung, bekannt aus der Softwareentwicklung, kann auch für APIs genutzt werden. Major Versionen signalisieren inkompatible Änderungen, Minor Versionen neue kompatible Features und Patch Versionen kleine Korrekturen. Für APIs wird oft nur die Major Version in der URL sichtbar gemacht.

Deprecation und Sunset

Wenn eine API Version abgelöst werden soll, kennzeichnest Du sie als deprecated. Informiere Nutzer frühzeitig über das End-of-Life, dokumentiere die Migration und gib genügend Zeit für den Umstieg. Header wie Sunset oder Deprecation helfen, das Ende einer Version maschinenlesbar anzuzeigen.

Versionierung in der Dokumentation

Jede Version sollte klar dokumentiert sein, inklusive Änderungsprotokoll, Migrationsanleitung und unterstützter Zeitrahmen. Nutzer müssen schnell erkennen, welche Version sie verwenden und welche Änderungen eine neue Version mit sich bringt.

Caching und Versionierung

Caching muss bei Versionierung beachtet werden. URLs mit Version im Pfad sind besonders cachefreundlich, weil unterschiedliche Versionen unterschiedliche URLs haben. Bei Header Versioning ist Vorsicht geboten, weil Caches oft nur die URL als Schlüssel verwenden und Header ignorieren.

Backward Compatibility

Backward Compatibility bedeutet, dass neue Versionen nicht die alte Version beeinträchtigen. Alte Versionen bleiben für die angekündigte Unterstützungszeit erreichbar. Vermeide es, alte Versionen vorzeitig abzuschalten, ohne Nutzer ausreichend informiert zu haben.

API Versionierung als Prozess

Versionierung funktioniert nur, wenn sie im Team als Prozess verankert ist. Klare Regeln für Releases, Reviews, Kommunikation und Monitoring sind notwendig. Jede Version sollte eine definierte Besitzerrolle und einen klaren Lebenszyklus haben.

Praxisbeispiel REST API Versionierung

Ein Software-as-a-Service Anbieter betreibt eine Kunden-API. Nach zwei Jahren sollen die Adressdaten strukturiert werden, was eine inkompatible Änderung darstellt.

Alte Version v1:

GET /v1/customers/42
{
  "id": 42,
  "name": "Musterfirma GmbH",
  "address": "Musterstraße 12, 10115 Berlin"
}

Neue Version v2:

GET /v2/customers/42
{
  "id": 42,
  "name": "Musterfirma GmbH",
  "address": {
    "street": "Musterstraße 12",
    "zip": "10115",
    "city": "Berlin",
    "country": "DE"
  }
}

Kommunikation an die Nutzer:

HTTP/1.1 200 OK
Deprecation: true
Sunset: Sat, 31 Dec 2026 23:59:59 GMT
Link: </v2/customers/42>; rel="successor-version"

So können bestehende Clients die v1 weiterhin nutzen, während sie rechtzeitig auf v2 migrieren. Die neue Version ist klar erreichbar, die alte Version wird planvoll abgelöst.

FAQ: REST API Versionierung

1. Was ist REST API Versionierung?

REST API Versionierung ist die gezielte Steuerung von Änderungen an einer API, um bestehende Clients nicht zu beeinträchtigen. Sie ermöglicht die Einführung neuer Features und das Beheben von Fehlern, ohne alte Integrationen zu brechen.

2. Wann braucht eine API eine neue Version?

Eine neue Version ist nötig bei inkompatiblen Änderungen, wie dem Entfernen von Feldern, dem Ändern von Datentypen, dem Verschieben von Endpunkten oder dem Ändern des Verhaltens bestehender Operationen.

3. Was ist der Unterschied zwischen URI und Header Versioning?

Beim URI Versioning steht die Version in der URL, beispielsweise /v1/customers. Beim Header Versioning wird die Version über einen Header wie api-version übermittelt. URI Versioning ist einfacher sichtbar und besser cachebar.

4. Was ist Content Negotiation bei APIs?

Content Negotiation nutzt den Accept Header, um Version und Format auszuhandeln. Beispielsweise Accept: application/vnd.shop.v1+json. Das ist flexibel, aber komplexer als URI Versioning.

5. Was bedeutet Deprecation?

Deprecation bedeutet, dass eine API Version oder ein Endpunkt als veraltet markiert wird. Nutzer werden informiert und haben Zeit, auf eine neuere Version zu migrieren, bevor die alte Version abgeschaltet wird.

6. Was ist der Sunset Header?

Der Sunset Header zeigt das geplante End-of-Life einer API oder Version an. Er ist maschinenlesbar und hilft Clients, automatisch zu erkennen, wann eine Version nicht mehr verfügbar sein wird.

7. Sollte man immer viele API Versionen unterstützen?

Nein, zu viele parallel laufende Versionen erhöhen Wartungsaufwand und Kosten. Unterstütze nur so viele Versionen, wie für die Nutzer erforderlich sind, und kommuniziere klare Abschalttermine.

8. Was ist eine kompatible Änderung?

Kompatible Änderungen fügen neue Funktionen hinzu, ohne bestehende Clients zu beeinträchtigen. Beispiele sind optionale neue Felder, neue Filter, neue Endpunkte oder zusätzliche Statuscodes.

9. Was ist eine inkompatible Änderung?

Inkompatible Änderungen verändern bestehende Funktionen so, dass alte Clients nicht mehr korrekt arbeiten. Dazu gehören das Entfernen von Feldern, das Ändern von Pflichtfeldern, das Verschieben von Endpunkten oder das Ändern von Datentypen.

10. Wie dokumentiert man API Versionen?

Versionen sollten in einem Changelog dokumentiert werden, das inkompatible und kompatible Änderungen auflistet. Eine Migrationsanleitung hilft Nutzern, von einer Version zur nächsten zu wechseln.

11. Was ist semantische Versionierung?

Semantische Versionierung verwendet Major, Minor und Patch Versionen. Major steht für inkompatible Änderungen, Minor für neue kompatible Features und Patch für Fehlerbehebungen. Bei APIs wird oft nur die Major Version in der URL angezeigt.

12. Wie wirkt sich Versionierung auf Caching aus?

URI Versioning ist besonders cachefreundlich, weil unterschiedliche Versionen unterschiedliche URLs haben. Bei Header Versioning müssen Caches so konfiguriert werden, dass sie den Versionsheader berücksichtigen.

13. Was ist Backward Compatibility?

Backward Compatibility bedeutet, dass neue Versionen oder Änderungen keine negativen Auswirkungen auf bestehende Clients haben. Alte Versionen bleiben für die angekündigte Zeit verfügbar und funktionieren unverändert.

14. Sollte man API Versionen in OpenAPI angeben?

Ja, OpenAPI ermöglicht es, die Version der API im info.version Feld anzugeben. Bei URI Versioning wird die Version oft auch im Server-URL oder in den Pfaden reflektiert.

15. Welche Rolle spielt Versionierung im API Lifecycle?

Versionierung ist ein zentraler Teil des API Lifecycle. Sie begleitet Planung, Release, Betrieb, Deprecation und Abschaltung einer API. Ohne klare Versionierung ist eine langfristige, stabile API-Nutzung kaum möglich.

Weiter im API Lernpfad

Der nächste Artikel im API Lernpfad behandelt REST API Fehlerbehandlung: Statuscodes und Error Objects — wie Du Fehler in APIs strukturiert, standardkonform und client-freundlich behandelst.

Quellen

  1. https://www.rfc-editor.org/rfc/rfc9110
  2. https://opensource.zalando.com/restful-api-guidelines/index.html
  3. https://developer.mozilla.org/docs/Web/HTTP/Headers/Accept

Buchempfehlungen zur API-Entwicklung

Wenn Du Dich weiter mit API Versionierung, API Design und Softwarearchitektur beschäftigen möchtest, empfehlen wir Dir die folgenden Bücher:

API-Entwicklung

Bücher über API-Design, REST, GraphQL, OpenAPI und API-Architektur

REST und HTTP: Entwicklung und Integration nach REST-Prinzipien von Stefan Tilkov

REST und HTTP: Entwicklung und Integration nach REST-Prinzipien von Stefan Tilkov

Bei Amazon ansehen

Affiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.

API-Design: Praxishandbuch für Java- und Webservice-Entwickler

API-Design: Praxishandbuch für Java- und Webservice-Entwickler

Bei Amazon ansehen

Affiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.

Microservices: Grundlagen flexibler Softwarearchitekturen von Eberhard Wolff

Microservices: Grundlagen flexibler Softwarearchitekturen von Eberhard Wolff

Bei Amazon ansehen

Affiliate-Link: Bei einem Kauf erhalten wir möglicherweise eine Provision.

Zurück zum DEV Blog
Share:

Ähnliche Beiträge