API-Kompatibilitätsrichtlinie und Richtlinien für Nichtweiterverwendung
Das Dokument legt die Richtlinien und Vorgehensweisen fest, nach denen IBM Verify vorgeht, um sicherzustellen, dass neue Versionen von APIs (Application Programming Interfaces) mit früheren Versionen kompatibel bleiben. Darüber hinaus wird in dem Dokument der Prozess beschrieben, der zur schrittweisen Einstellung von Wirkstoffen eingeführt wurde.
Kompatibilitätsrichtlinie
Soweit möglich, werden REST-Ressourcen und ihre Darstellungen so beibehalten, dass sie mit früheren Versionen kompatibel sind. Wenn der Vertrag derart geändert werden muss, dass er mit früheren Versionen nicht kompatibel ist, wird eine neue Ressource, ein neuer Medientyp oder eine neue Version mit der neuen Darstellung erstellt. Die alte Ressource bzw. der alte Medientyp werden gemäß der Richtlinie für die Nichtweiterverwendung der API verwaltet.Kompatibilität mit früheren Versionen oder Non-Breaking Changes
- Hinzufügen eines Ressourcen-URI, der unter Umständen eine vorhandene API-Ressource erweitert
- Diese Änderung ist im Allgemeinen sicher. Bei der Änderung müssen jedoch gängige Client-Frameworks berücksichtigt
werden, die möglicherweise Code generieren, der mit dieser Änderung in Konflikt steht. Die folgenden Beispiele sind
Typen von Änderungen, die vermieden werden sollten, da sie möglicherweise vom Client generierten Code zerstören
könnten.
- Eine API ist in /v1.0/foo/bar vorhanden. Der Codegenerator generiert möglicherweise
GetBarals eine Clientmethode. /v1.0/foo/{param}Wenn eine neue API eingeführt wird, wobei{param}eine beliebige Zeichenfolge ist, generiert der Codegenerator die neue Client-Methode möglicherweise alsGetFoo(String param). Diese Änderung kann auf dem Client einen Breaking Change zur Folge haben, da die inGetBareingebettete Logik nicht mehr aufgerufen wird. - Ein aktueller Pfad wie /v1.0/foo/bar kann den vom Client generierten Code
GetBarundGetBarAsynczur Folge haben. Das Hinzufügen einer API /v1.0/foo/Async steht im Konflikt mit diesem generierten Code.
- Eine API ist in /v1.0/foo/bar vorhanden. Der Codegenerator generiert möglicherweise
- HTTP-Methode einer API-Schnittstelle hinzufügen
- Diese Änderung ist unter der Bedingung sicher, dass die Anforderungsnutzdaten vor dieser Änderung weiterhin vorhanden sind und dasselbe Verhalten zeigen. Ein oder mehrere optionale Felder können dem Anforderungshauptteil einer vorhanden API oder als Abfragezeichenfolgeparameter hinzugefügt werden.
- Optionale Anforderungsheader hinzufügen
- Diese Änderung ist unter der Bedingung sicher, dass die Anforderung vor dieser Änderung weiterhin auf dieselbe Art und Weise antwortet.
- Zulässigen Wert zu einer vorhandenen Eigenschaft hinzufügen
- API-Modelle verwenden Zeichenfolgen, um Eigenschaften dazustellen, die eine eingeschränkte Liste mit Werten
zulassen. Beispielsweise kann
typein einer Ressource zum Auflisten der aktuellen Liste der Ressourcentypen dokumentiert werden. Vom Client wird erwartet, dass er statt der strikten Deserialisierung eines klar klar strukturierten Typsenumeine generische Zeichenfolge für diese Typen verwendet. Eine Ressource, die eine Eigenschaft mit mehreren möglichen Werten akzeptiert, kann erweitert werden, um mehr Werte zuzulassen. Dieser neue Wert oder diese neuen Werte können entsprechende neue Eigenschaften und Validierungsregeln einführen. Ein Client muss sicherstellen, dass er keine nicht vorhandenenenum-Werte validiert, indem er beispielsweise eine Anforderung mit einem ungültigenenum-Wert sendet und eine Fehlerantwort erwartet.Vorhandene Eigenschaftswerte unterstützen weiterhin das vorhandene Verhalten. Jeder Client-Code, der beispielsweise Verzweigungslogik für den Ressourcentyp enthält, funktioniert weiterhin wie bisher.
- Optionale Felder und/oder Header zu einer Antwort hinzufügen
Optionale Felder und Header können einer API-Antwort jederzeit hinzugefügt werden. Der Client Anpassungen für derartige Änderungen ausführen.
- Fehlernachricht oder Ressourcenbeschreibungen in der API-Antwort ändern
- Das Feld
messageIdin einer Fehlerantwort wird als nicht änderbar betrachtet und es wird davon ausgegangen, dass es immer die angegebene Liste der Fehlerbedingungen oder -situationen abdeckt. Die Beschreibung, die dieser Nachricht zugeordnet ist, kann sich ändern, ohne dass sich die semantische Bedeutung der Nachricht für einen Benutzer ändert.Clients dürfen keine Logik auf der Basis des Attributs
messageDescriptionerstellen. - Geltungsbereich einer Fehlernachrichten-ID vergrößern
- Das Feld
messageIdbezieht sich auf eine oder mehrere Fehlerbedingungen. Diese Nachrichten-ID (messageId) kann jederzeit erweitert werden, um mehr Fehlerbedingungen gleichzeitig abzudecken. Es wird jedoch davon ausgegangen, dass jede derartige Erweiterung logisch und nicht willkürlich ist. Die neuen Fehlerbedingungen müssen in engem Zusammenhang mit einer vorhandenen Fehlerbedingung stehen, die von dieser Nachricht abgedeckt wird. - Ratenbegrenzungen für Header und Fehler
Die Ratenbegrenzungen können während der Lebensdauer der API in API-Endpunkten angepasst werden und erfordern keine Versionsaktualisierung.
Der Client, der den HTTP-Statuscode 429 für zu viele Anforderungen empfängt, muss Anpassungen ausführen.
Breaking Changes
- API-Ressourcenendpunkt oder HTTP-Methode entfernen oder umbenennen
- Dieser Typ von Änderung führt zum Fehlschlagen jedes Clients, der die API ohne Berechtigung verwendet, es sei denn, die Durchführung dieser Änderung ist aufgrund einer dringend erforderlichen Sicherheitsanforderung notwendig. Es wird alles unternommen, um eine derartige Änderung zu verhindern.
enum-Werte entfernen oder umbenennen- Werte für
enumkönnen hinzugefügt, aber nicht entfernt werden. - Typ (
type) eines Felds ändern Im Allgemeinen darf der Typ (
type) eines Felds nicht geändert werden. Wenn die API-Implementierung den vorherigen Wert fürtypejedoch akzeptieren kann und mit dem vorherigen Wert fürtypeantwortet, wird diese Änderung als mit früheren Versionen kompatibel betrachtet.- Sichtbares Verhalten vorhandener Anforderungen ändern
Wenn eine Anforderung zuvor eine bestimmte Aktion oder Antwort zur Folge hatte, muss sie weiterhin dasselbe Verhalten zeigen. Die einzige Ausnahme sind die Erweiterungen, die an einem vorhandenen Vertrag in Form neuer Fehlernachrichten, HTTP-Statuscodes und Anforderungs- oder Antwortfelder zulässig sind.
Richtlinie für die Nichtweiterverwendung
- Hinweis zur Nichtweiterverwendung
- Ein Hinweis zur Nichtweiterverwendung von APIs wird über die folgenden Kanäle mindestens 12 Monate vor dem
vorgeschlagenen Datum für das Ende des Lebenszyklus ausgegeben.
- Swagger
- Swagger definiert den API-Vertrag für Konsumenten. Die APIs, die nicht mehr verwendet werden, sind mit dem Tag
deprecatedmarkiert. - Sunset-API-Antwortheader „ HTTP “
- Die APIs, die als veraltet gelten, geben einen
SunsetAntwort-Header „ HTTP “ zurück, der das Datum angibt, ab dem die Ressource nicht mehr verfügbar ist. DerLinkAntwort-Header „ HTTP “ enthält eine URI zu den Informationen zur API-Auslaufrichtlinie. Überwachen Sie die API-Aufrufe auf denSunsetAntwort-Header „ HTTP “, um genügend Zeit für die Migration von der veraltenden API zu gewährleisten. - IBM Documentation
- Der Abschnitt 'Neuerungen' enthält eine Benachrichtigung über die Nichtweiterverwendung mit Links zu ausführlicheren Informationen. Die Informationen zeigen die API, die veraltete Version, die Ersatzversion und das Datum für das Ende des Lebenszyklus an. Die Benachrichtigung wird so lange angezeigt, bis die APIs das Datum für das Ende des Lebenszyklus erreichen.
- Nichtweiterverwendungsdatum
- Alle IBM Documentation Inhalte, die nun überflüssig sind, werden entfernt.
- Die gesamte Swagger-Dokumentation für die veralteten APIs wird entfernt oder ausgeblendet.