Zum Inhalt springen
SAP, DATEV und Dynamics Experten
Integration

API-Versionierung: Schnittstellen langlebig halten

12 Min. Lesezeit
API-VersionierungDeprecationSchnittstellenBackward CompatibilityWartbarkeit

Eine Schnittstelle zwischen Shop und ERP ist selten für die Ewigkeit gebaut: Felder kommen hinzu, Datenformate ändern sich, neue Geschäftsregeln erfordern andere Strukturen. Die zentrale Frage ist, wie sich eine API weiterentwickeln lässt, ohne bestehende Integrationen über Nacht zu zerstören. Laut dem Postman State of the API Report nennen 60 Prozent der API-Anbieter Breaking Changes als eine ihrer größten Herausforderungen (Postman State of the API 2023). Gleichzeitig versionieren nur 60 Prozent der Teams ihre APIs überhaupt aktiv und lediglich 26 Prozent nutzen semantische Versionierung (Postman State of the API 2025). Wer Shop-Schnittstellen langlebig und stabil halten will, braucht daher von Anfang an eine durchdachte Versionierungs- und Deprecation-Strategie. Dieser Artikel zeigt die gängigen Versionierungsmodelle, ihre Vor- und Nachteile und wie ein geordneter Lebenszyklus von Schnittstellen aussieht.

API-Versionierung: Lebenszyklus einer Schnittstellev1 aktivv1 deprecatedv1 Sunsetv2 ReleaseAbschaltungv2 aktiv (parallel zur Migrationsphase)Versionierungs-StrategienURI-Versionierung/api/v2/ordersSichtbar, cachebarHeader-VersionierungAccept: v=2026-06Saubere URLsDatums-Versionierung2026-06-22Pinning pro ClientDeprecation-Signale für KonsumentenDeprecation-HeaderSunset-DatumChangelogMigrationsleitfaden

Warum API-Versionierung über die Lebensdauer entscheidet

APIs sind zur Infrastruktur des digitalen Handels geworden. Laut Gartner integrieren inzwischen über 90 Prozent der neuen Unternehmensanwendungen APIs als Kernkomponente ihrer Architektur (Gartner). Der Markt für API-Management soll von rund 10 Milliarden US-Dollar im Jahr 2025 auf über 100 Milliarden US-Dollar bis 2033 wachsen (Market Data Forecast, 2025). Je mehr Systeme von einer Schnittstelle abhängen, desto teurer wird jede unkoordinierte Änderung.

Das Kernproblem ist die Kopplung zwischen Anbieter und Konsument. Wenn der Shop ein Datenfeld umbenennt, das ein angebundenes ERP-System erwartet, bricht die Verarbeitung -- möglicherweise unbemerkt, bis Bestellungen nicht mehr ankommen. Versionierung löst dieses Problem, indem sie mehrere Stand-der-Technik-Definitionen einer Schnittstelle gleichzeitig bereitstellt: Bestehende Konsumenten arbeiten weiter mit der alten Version, während neue Funktionen in einer neuen Version ausgeliefert werden. Diese zeitliche Entkopplung ist die Grundlage jeder wartbaren Integration und ergänzt die Architekturfragen, die wir im Beitrag zu REST-API versus Middleware behandeln.

Breaking Change und Non-Breaking Change

Ein Breaking Change zwingt Konsumenten zu Anpassungen: entfernte Felder, geänderte Datentypen, umbenannte Endpunkte oder verschärfte Pflichtfelder. Ein Non-Breaking Change ist abwärtskompatibel: neue optionale Felder, neue Endpunkte oder zusätzliche Enum-Werte. Die Faustregel lautet, bestehende Strukturen grundsätzlich nicht zu entfernen oder umzudeuten, sondern stets additiv zu erweitern.

URI-Versionierung: Die Version steht im Pfad

Die verbreitetste Strategie ist die URI-Versionierung, bei der die Versionsnummer Teil des Pfads ist, etwa /api/v1/orders und /api/v2/orders. Der grosse Vorteil ist die Sichtbarkeit: Jeder Aufruf macht sofort klar, welche Version genutzt wird. Das vereinfacht Debugging, Logging und das Caching durch Proxies und CDNs, da unterschiedliche Versionen unterschiedliche URLs besitzen.

URI-Versionierung ist auch für Entwicklerinnen und Entwickler am einfachsten zu verstehen und in der Browser-Adresszeile testbar. Die Shopware Store API und Admin API arbeiten mit einem Versionspräfix im Pfad, was sich gut in dieses Modell einfügt. Der Nachteil: Streng genommen sollte dieselbe Ressource unter einer stabilen URL erreichbar sein -- mehrere Versionen derselben Bestellung unter verschiedenen Pfaden widersprechen einer reinen REST-Lehre. In der Praxis überwiegt jedoch meist der Pragmatismus.

URI-Versionierung
GET /api/v1/orders/4711
GET /api/v2/orders/4711

# v2 führt ein strukturiertes Adressobjekt ein,
# v1 bleibt für bestehende Konsumenten unverändert erreichbar

Header-Versionierung: Saubere URLs, Version im Request

Bei der Header-Versionierung bleibt die URL stabil, und die gewünschte Version wird über einen HTTP-Header übermittelt -- entweder über einen eigenen Header wie X-API-Version oder über Content Negotiation im Accept-Header. So bleibt die Ressourcen-URL über alle Versionen hinweg identisch, was der REST-Philosophie näher kommt.

Der Nachteil liegt in der geringeren Sichtbarkeit: Die Version ist in der URL nicht erkennbar, was Debugging und Caching erschwert. Header-basierte Versionierung erfordert ausserdem disziplinierte Clients, die den Header zuverlässig setzen. Vergisst ein Konsument den Header, muss der Server eine sinnvolle Standardversion liefern -- und genau diese Standardwahl wird bei jedem Versionswechsel zur kritischen Entscheidung. Welche Variante passt, hängt von der Konsumentenlandschaft und den Caching-Anforderungen ab.

KriteriumURI-VersionierungHeader-Versionierung
SichtbarkeitHoch, Version im PfadGering, Version im Header
CachingEinfach, eigene URL je VersionAufwendiger, Vary-Header nötig
Testbarkeit im BrowserDirekt möglichTooling erforderlich
REST-KonformitätSchwächer (mehrere URLs)Stärker (stabile URL)
VerbreitungSehr hochMittel, eher bei grossen APIs
Standardversion nötigOptionalWichtig bei fehlendem Header

Datums-Versionierung und Client-Pinning

Ein drittes Modell verwendet Datumsstempel statt fortlaufender Nummern, etwa die Version 2026-06-22. Dieser Ansatz hat sich bei grossen Plattform-APIs bewährt, allen voran bei Stripe, das seine API seit 2011 datumsbasiert versioniert und Abwärtskompatibilität über mehr als ein Jahrzehnt hinweg gepflegt hat (Stripe Engineering Blog). Beim ersten Aufruf wird ein Konto automatisch auf die aktuelle Version festgelegt -- das sogenannte Pinning.

Der Charme dieses Modells liegt im internen Aufbau: Die Kernlogik kennt nur die jeweils neueste Version. Für ältere Versionen sorgen isolierte Transformationsmodule, die eine moderne Antwort schrittweise in das Format älterer Versionen zurückrechnen (Stripe Engineering Blog). So bleibt die Geschäftslogik frei von Verzweigungen für alte Versionen, und neue Funktionen entstehen ohne Rücksicht auf historische Schemata. Für Shop-Schnittstellen mit vielen externen Konsumenten kann dieses Muster ein Vorbild sein, auch wenn es in der Implementierung anspruchsvoller ist.

Stripe hat die Kompatibilität mit jeder API-Version seit Gründung 2011 aufrechterhalten -- über ein Jahrzehnt abwärtskompatibler Schnittstellen durch konsequente Transformationsschichten.

Stripe Engineering Blog

Semantische Versionierung: Major, Minor, Patch

Semantische Versionierung (SemVer) strukturiert Versionsnummern nach dem Schema MAJOR.MINOR.PATCH. Eine Erhöhung der Major-Version signalisiert Breaking Changes, eine Minor-Version abwärtskompatible Erweiterungen und ein Patch reine Fehlerbehebungen. Dieses Schema kommuniziert die Tragweite einer Änderung allein über die Nummer.

Trotz seiner Klarheit ist SemVer bei APIs weniger verbreitet, als man erwarten würde: Nur 26 Prozent der Teams nutzen semantische Versionierung, sodass die meisten Änderungen verfolgen, ohne deren Auswirkung klar zu kommunizieren (Postman State of the API 2025). Für Schnittstellen empfiehlt sich meist eine Kombination: Die Major-Version landet im URI-Pfad (v1, v2), während Minor- und Patch-Änderungen abwärtskompatibel innerhalb derselben Major-Version ausgeliefert werden. So bleiben Versionspfade stabil, und nur echte Breaking Changes erzwingen einen neuen Pfad.

  • MAJOR (v1 zu v2): Breaking Changes, neuer URI-Pfad, parallele Bereitstellung während der Migration
  • MINOR: neue optionale Felder oder Endpunkte, abwärtskompatibel, kein Pfadwechsel
  • PATCH: Fehlerbehebungen ohne Schnittstellenänderung, für Konsumenten transparent

Backward Compatibility als Konstruktionsprinzip

Die wirksamste Strategie gegen Versions-Wildwuchs ist, Breaking Changes von vornherein zu vermeiden. Das Prinzip der Toleranz fordert, dass ein Konsument unbekannte zusätzliche Felder ignoriert, statt mit einem Fehler zu reagieren. Ein Anbieter kann dann neue Felder hinzufügen, ohne bestehende Clients zu stören. Umgekehrt sollte ein Anbieter Pflichtfelder grundsätzlich nicht nachträglich verschärfen oder Datentypen ändern.

Additiv erweitern

Neue Felder und Endpunkte hinzufügen, statt bestehende zu ändern. Optionale Felder mit sinnvollen Standardwerten halten alte Clients lauffähig.

Tolerant lesen

Konsumenten sollten unbekannte Felder ignorieren und nur die benötigten Daten verarbeiten. So überstehen sie additive Erweiterungen ohne Anpassung.

Defaults bewahren

Geänderte Standardwerte sind oft unbemerkte Breaking Changes. Bestehende Defaults bleiben stabil, neue Optionen werden additiv ergänzt.

Transformationslayer

Ein Kompatibilitätslayer rechnet moderne Antworten in ältere Formate zurück und hält die Kernlogik frei von Versionsverzweigungen.

In Integrationsprojekten zahlt sich diese Disziplin direkt aus: Je mehr Änderungen abwärtskompatibel bleiben, desto seltener muss eine neue Hauptversion ausgerollt werden -- und desto seltener müssen Konsumenten migrieren. Eine robuste Fehlerbehandlung in Schnittstellen ergänzt dieses Prinzip, indem sie unerwartete Datenformate auffängt, statt die Verarbeitung abzubrechen.

Der Deprecation-Prozess: Alte Versionen geordnet abschalten

Keine Version lebt ewig. Irgendwann soll eine alte Schnittstellenversion abgeschaltet werden, um Wartungsaufwand zu senken. Entscheidend ist, dass dies geordnet und mit ausreichend Vorlauf geschieht. Branchenüblich sind Deprecation-Fristen, die eine Ankündigungsphase, eine Migrationsphase und schließlich die Abschaltung umfassen; verbreitet sind Fristen von mehreren Monaten bis zu rund zwei Jahren je nach Tragweite (Gravitee, 2025).

Ein sauberer Deprecation-Prozess folgt mehreren Stufen. Zuerst wird die neue Version veröffentlicht, während die alte als deprecated markiert, aber weiter betrieben wird. Dann werden Konsumenten aktiv informiert und bei der Migration unterstützt. Erst nach Ablauf der Frist erfolgt die Abschaltung, der sogenannte Sunset.

  1. Ankündigung: Neue Version veröffentlichen, alte Version als deprecated markieren, Changelog pflegen
  2. Signalisierung: Deprecation- und Sunset-Header in jeder Antwort der alten Version senden
  3. Migrationshilfe: Migrationsleitfaden, Mapping-Tabellen und Ansprechpartner bereitstellen
  4. Monitoring: Nutzung der alten Version messen, verbliebene Konsumenten gezielt ansprechen
  5. Sunset: Alte Version nach Ablauf der Frist abschalten, mit klarer Fehlermeldung und Verweis auf die neue Version

Deprecation-Signale: Header, Sunset und Changelog

Damit Konsumenten eine bevorstehende Abschaltung nicht übersehen, sollte sie technisch signalisiert werden. Der HTTP-Standard sieht hierfür dedizierte Header vor: Der Deprecation-Header markiert eine Antwort als veraltet, der Sunset-Header nennt das geplante Abschaltdatum. So erfährt jeder Client bei jedem Aufruf maschinenlesbar, dass die genutzte Version ein Ablaufdatum hat.

Deprecation-Signale im Response-Header
HTTP/1.1 200 OK
Deprecation: true
Sunset: Sat, 20 Jun 2026 23:59:59 GMT
Link: </de/api-entwicklung/>; rel="deprecation"
Warning: 299 - "Version v1 wird am 20.06.2026 abgeschaltet, bitte auf v2 migrieren"

Ergänzend zu den Headern braucht es einen gepflegten Changelog, der jede Änderung dokumentiert, sowie einen Migrationsleitfaden, der die Unterschiede zwischen den Versionen konkret beschreibt. Klare Kommunikation gilt als zentraler Erfolgsfaktor, da Breaking Changes für abhängige Systeme erhebliche Störungen verursachen können (Redocly, 2025). Wer Deprecation rein per E-Mail oder Dokumentation kommuniziert, riskiert, dass Konsumenten die Frist verpassen -- maschinenlesbare Signale erreichen auch automatisierte Clients.

API Evolution statt Versions-Wildwuchs

Eine zunehmend bevorzugte Philosophie ist die API Evolution: Statt für jede Änderung eine neue Version zu erzeugen, wird eine einzige Version möglichst lange gepflegt. Non-Breaking Changes fliessen direkt ein, und nur für echte Breaking Changes entsteht eine neue Version oder ein neuer Endpunkt. Erfolgreiche Plattformen kombinieren dieses Vorgehen mit expliziter Versionierung für die seltenen Fälle, in denen eine inkompatible Änderung unvermeidlich ist (Speakeasy, 2025).

Dieser hybride Ansatz reduziert die Zahl paralleler Versionen deutlich und damit den Wartungsaufwand. Weniger Versionen bedeuten weniger Code-Pfade, weniger Tests und weniger Verwirrung bei Konsumenten. Für Shop-Schnittstellen, die über Jahre stabil laufen sollen, ist das Ziel daher nicht möglichst viele Versionen, sondern möglichst wenige Versionswechsel bei hoher Abwärtskompatibilität.

Weniger Versionen, mehr Stabilität

Jede zusätzliche Live-Version erhöht den Wartungsaufwand erheblich. Das eigentliche Ziel einer guten Versionierungsstrategie ist nicht, viele Versionen zu verwalten, sondern möglichst selten eine neue Hauptversion zu benötigen -- durch konsequente Abwärtskompatibilität.

Vertragstests und Monitoring für Versionssicherheit

Damit versehentliche Breaking Changes gar nicht erst in Produktion gelangen, helfen Vertragstests (Contract Testing). Sie prüfen automatisiert, ob eine API ihren dokumentierten Vertrag -- etwa eine OpenAPI-Spezifikation -- weiterhin erfüllt. Aendert sich ein Feldtyp oder verschwindet ein Endpunkt, schlägt der Test bereits in der Entwicklungspipeline an, bevor Konsumenten betroffen sind.

Ergänzend liefert das Monitoring der Versionsnutzung die Datengrundlage für Deprecation-Entscheidungen. Wenn messbar ist, wie viele Konsumenten noch eine alte Version nutzen, lässt sich die Abschaltung fundiert planen statt zu raten. Ein zentrales Middleware-Gateway eignet sich gut, um Versionsnutzung, Fehlerquoten und Latenzen pro Version an einer Stelle zu erfassen. Diese Observability ist die Voraussetzung dafür, alte Versionen abzuschalten, ohne aktive Konsumenten zu überraschen.

Versionierung in der Shop-ERP-Integration konkret

In der Praxis der Shop-ERP-Integration treffen mehrere versionierte Welten aufeinander: die Shopware-API, die API des ERP-Systems wie SAP oder Dynamics und gegebenenfalls eine eigene Integrationsschicht. Jede dieser Schnittstellen hat ihren eigenen Versionslebenszyklus, und Updates erfolgen selten synchron.

Hier zeigt sich der Wert einer zwischengeschalteten Integrationsschicht: Sie kapselt die Versionsunterschiede der angebundenen Systeme. Wenn das ERP-System eine neue API-Version veröffentlicht, wird nur der entsprechende Konnektor in der Integrationsschicht angepasst, während der Shop unverändert weiterarbeitet. Diese Entkopplung ist dasselbe Prinzip, das wir im Beitrag zu REST-API versus Middleware ausführlich behandeln -- angewandt auf das Problem divergierender Versionszyklen. Erfahrungsgemäß kommt das dritte oder vierte angebundene System mit eigenem Versionsfahrplan schneller, als die meisten Unternehmen zunächst annehmen (Projekterfahrung).

Praxistipp für langlebige Schnittstellen

Definieren Sie schon beim ersten Entwurf einer Schnittstelle, wie später versioniert wird, wie Deprecation kommuniziert wird und welche Standardversion bei fehlender Angabe gilt. Diese Festlegungen kosten am Anfang wenig Aufwand, ersparen aber später aufwendige Migrationen und ungeplante Ausfälle.

Quellen und Studien

Dieser Artikel basiert auf Daten aus: Postman State of the API Report (2023 und 2025), Gartner (Prognosen zur API-Adoption), Market Data Forecast API Management Market (2025), Stripe Engineering Blog (API Versioning), Gravitee API Versioning Best Practices (2025), Redocly API Versioning Best Practices (2025), Speakeasy Versioning Best Practices (2025) sowie eigener Projekterfahrung.