4.16. Versionierung und Evolution ermöglichen
4.16. Versionierung und Evolution ermöglichen
Einer der schwierigsten Aspekte bei der Gestaltung eines Anwendungsprotokolls besteht darin, sicherzustellen, dass es im Laufe der Zeit weiterentwickelt werden kann, während die Kompatibilität mit bestehenden Bereitstellungen gewahrt bleibt.
Anwendungen, die HTTP verwenden, SOLLTEN von Anfang an für Erweiterbarkeit entworfen werden. Dies umfasst:
-
Protokollverhandlung: Bereitstellung von Mechanismen für Clients und Server, um zu verhandeln, welche Version oder Funktionen verwendet werden sollen.
-
Graceful Degradation: Ermöglichung, dass ältere Clients mit neueren Servern funktionieren (und umgekehrt), auch wenn sie nicht alle Funktionen unterstützen.
-
Funktionserkennung: Ermöglichung, dass Clients entdecken können, welche Funktionen ein Server unterstützt.
-
Ignorieren unbekannter Elemente: Festlegung, dass Implementierungen unbekannte Header-Felder, Inhalte oder andere Protokollelemente ignorieren sollten, anstatt sie als Fehler zu behandeln.
Gängige Ansätze zur Versionierung umfassen:
-
Medientyp-Versionierung: Verwendung unterschiedlicher Medientypen für verschiedene Versionen (z. B.
application/vnd.example.v1+json,application/vnd.example.v2+json). -
URL-Versionierung: Einbeziehung der Version in die URL (z. B.
/v1/resource,/v2/resource). Dies kann jedoch Probleme mit Caching und Ressourcenidentität verursachen. -
Header-Feld-Versionierung: Verwendung eines benutzerdefinierten Header-Feldes zur Angabe der Version.
-
Funktionsbasierte Verhandlung: Anstatt das gesamte Protokoll zu versionieren, Verhandlung einzelner Funktionen ermöglichen.
Anwendungen SOLLTEN:
-
Klar dokumentieren, wie Versionierung funktioniert.
-
Anleitungen zur Aufrechterhaltung der Abwärtskompatibilität bereitstellen.
-
Die Auswirkungen der Versionierung auf Caching und andere HTTP-Funktionen berücksichtigen.
-
Vermeiden, inkompatible Änderungen an bestehenden Versionen vorzunehmen; stattdessen neue Versionen definieren, wenn inkompatible Änderungen erforderlich sind.
Anwendungen SOLLTEN NICHT:
-
URL-Query-Parameter für die Versionierung verwenden, da dies das Caching beeinträchtigen kann.
-
Situationen schaffen, in denen verschiedene Versionen des Protokolls dieselben Identifikatoren (URLs, Medientypen) für verschiedene Dinge verwenden.
-
Clients zwingen, sofort zu aktualisieren, wenn neue Versionen veröffentlicht werden.