OpenAPI Diff

Ein OpenAPI-Diff vergleicht zwei Versionen einer API-Spezifikation — den alten Vertrag und den neuen — und berichtet, was sich tatsächlich geändert hat: entfernte Endpunkte, Parameter, die Pflicht wurden, Felder, deren Typ sich änderte, Enum-Werte, die verschwanden. Laden oder fügen Sie unten beide Spezifikationen ein, und diese Seite klassifiziert jede Änderung als Breaking oder nicht Breaking, damit Sie ein Anbieter-Upgrade oder Ihre eigene Version beurteilen können, bevor sie die Produktion erreicht. Beide Dateien werden auf dieser Seite, auf Ihrem Gerät geparst — nichts wird hochgeladen, was zählt, weil Spezifikationen interne Endpunkte beschreiben, die Sie vielleicht nicht auf fremden Servern sehen wollen. Neu in diesem Vokabular? Der Begleitartikel Breaking API Changes erklärt definiert jeden hier verwendeten Begriff.

Zuletzt aktualisiert:

Alte Spezifikation (der Vertrag, den Clients heute nutzen)

Legen Sie eine Datei irgendwo in diesem Bereich ab, wählen Sie eine oder fügen Sie den Text ein. Das Parsen geschieht lokal; nichts verlässt dieses Gerät.

Neue Spezifikation (der Kandidatenvertrag)

Legen Sie eine Datei irgendwo in diesem Bereich ab, wählen Sie eine oder fügen Sie den Text ein. Das Parsen geschieht lokal; nichts verlässt dieses Gerät.

Was dieser Differ prüft — und was Breaking wirklich bedeutet

Eine Änderung ist Breaking, wenn ein Client, der korrekt gegen die alte Spezifikation geschrieben wurde, gegen die neue scheitern kann, ohne eine Zeile seines eigenen Codes zu ändern. Diese Definition treibt jedes Urteil auf dieser Seite. Einen Pfad oder eine Operation zu entfernen ist Breaking, weil bestehende Aufrufe kein Ziel mehr haben. Einen Antwortstatus zu entfernen — vor allem einen 2xx — ist Breaking, weil die Fehlerbehandlung des Clients um die alte Menge herum geschrieben wurde. Einen Pflichtparameter oder eine Pflicht-Anfrageeigenschaft hinzuzufügen ist Breaking, weil die gestern gültige Anfrage plötzlich abgelehnt wird. Den Typ oder das Format eines Felds zu ändern ist Breaking, weil Parser, Validatoren und generierte SDKs alle auf dem deklarierten Typ aufbauen. Einen Enum-Wert zu entfernen ist Breaking, weil ein Client ihn noch senden oder Daten speichern kann, die er nicht mehr interpretieren kann. Alles andere — ein neuer Endpunkt, ein optionaler Parameter, ein neues Antwortfeld, ein neuer Enum-Wert, ein neuer Statuscode — wird als nicht Breaking berichtet: Alte Clients funktionieren weiter, auch wenn sie die neue Fähigkeit noch nicht nutzen können.

Der Vergleich ist strukturell, nicht textuell. Beide Dokumente werden in dasselbe Modell normalisiert, bevor irgendetwas verglichen wird: jeder Pfad und jede Operation, ihre nach Name und Ort indizierten Parameter, ihr Anfragekörper und jede Antwort, reduziert auf eine Schema-Signatur — eine deterministische Zusammenfassung von Typen, Formaten, Eigenschaftsnamen, Pflichtlisten und Enum-Werten, rekursiv aufgebaut und mit aufgelösten lokalen $ref-Referenzen. Deshalb erzeugen das Umordnen von Schlüsseln, das Neuformatieren von Leerzeichen oder das Umschreiben jeder Beschreibung einen leeren Diff: Nichts davon ändert den Vertrag. Und deshalb wird auch eine Änderung gefunden, die drei Ebenen tief in einem referenzierten Schema vergraben ist — die Signatur expandiert die Referenz, statt nur ihren Namen zu vergleichen.

Zwei Eingabeformen werden akzeptiert, weil das Ökosystem beide veröffentlicht: Zuerst wird JSON versucht, und wenn das scheitert, wird der Text als YAML geparst, das Format, das die meisten handgeschriebenen OpenAPI-Dokumente verwenden. Auch Swagger-2.0-Dokumente funktionieren, einschließlich ihrer in: body-Parameter und der Schemata pro Antwort. Absichtlich gibt es kein Live-Abrufen und kein Hochladen: Fügen Sie die Dokumente ein oder legen Sie die Dateien ab, genau wie bei einer HAR-Aufzeichnung, und der Vergleich läuft, wenn Sie die Schaltfläche drücken — nicht bei jedem Tastenschlag —, sodass zwei große eingefügte Spezifikationen reaktionsschnell bleiben.

Nutzen Sie das Ergebnis als Freigabeschranke, nicht als Dekoration. In einer Prüfung ist die Breaking-Liste die Tagesordnung: Jeder Eintrag braucht entweder eine Korrektur, eine Versionsanhebung, ein Deprecation-Fenster oder eine schriftliche Entscheidung, dass der Bruch beabsichtigt und kommuniziert ist. Die Nicht-Breaking-Liste ist der Entwurf des Änderungsprotokolls. Den Diff als JSON zu exportieren erlaubt es, diese Entscheidung neben dem Release zu archivieren, und die kopierbare Zusammenfassung passt direkt in einen Pull Request — dieselbe Disziplin, die Sie auf eine Vertragsänderung bei einem Webhook anwenden würden, bei der eine still geänderte Nutzlast jeden Abonnenten auf einmal bricht.

Ehrliche Grenzen, klar benannt. Dieser Differ vergleicht den deklarierten Vertrag: Er kann kein Verhalten sehen, das die Spezifikation nicht deklariert — etwa ein Feld, das seinen Typ behält, aber seine Bedeutung ändert, eine neue Geschäftsregel, strengere Rate Limits oder eine Fehlermeldung, die Clients (unklugerweise) geparst haben. Er folgt lokalen Referenzen und vergleicht Schemata bis zu einer begrenzten Tiefe, sodass pathologisch tief verschachtelte oder gegenseitig rekursive Schemata zusammengefasst statt endlos expandiert werden. Und ein Diff mit null Breaking Changes ist kein Versprechen, dass ein Upgrade sicher ist — es ist der Nachweis, dass der dokumentierte Vertrag gehalten hat, und genau das ist der Nachweis, den man vor dem Deployment haben sollte.

Die Klassifikationstabelle, gegen die diese Seite bewertet

Pfad oder Operation entferntBreaking. Aufrufe an einen Endpunkt, der nicht mehr existiert, schlagen rundheraus fehl; es gibt keine kompatible Weise, einen alten Client dagegen weiter betreiben zu lassen.
Antwortstatus entferntBreaking. Wiederholungs-, Fehlerbehandlungs- und Monitoring-Logik des Clients wird gegen die deklarierte Statusmenge geschrieben; einen 2xx zu verlieren ist die schwerste Form.
Parameter wurde Pflicht / Pflichtfeld hinzugefügtBreaking. Anfragen, die unter der alten Spezifikation gültig waren, werden von der neuen abgelehnt, also muss jeder bestehende Client sich ändern, bevor er den Endpunkt aufrufen kann.
Typ oder Format geändertBreaking. Parser, Validatoren und generierte SDKs werden aus dem deklarierten Typ gebaut; integer zu string (oder int32 zu int64) bricht strikte Clients, selbst wenn die Drahtwerte ähnlich aussehen.
Eigenschaft entfernt (Anfrage oder Antwort)Breaking. Eine Anfrageeigenschaft, die Clients senden, wird ignoriert oder abgelehnt; eine Antworteigenschaft, die Clients lesen, wird in ihrem Code null oder fehlt.
Enum-Wert entferntBreaking. Clients können den entfernten Wert noch senden oder gespeicherte Daten damit halten. Hinzugefügte Enum-Werte sind nicht Breaking und werden separat berichtet.
ErgänzungenNicht Breaking. Neue Pfade, Operationen, optionale Parameter, optionale Anfrageeigenschaften, Antworteigenschaften, Antwortstatus und Enum-Werte machen eine zuvor gültige Interaktion niemals ungültig.

Häufig gestellte Fragen

Werden meine Spezifikationsdateien irgendwo hochgeladen?

Nein. Beide Dokumente werden auf dieser Seite, auf Ihrem Gerät, geparst und verglichen; der Vergleich macht keine Netzwerkanfrage und nichts wird gespeichert. Das ist eine bewusste Regel: Eine Spezifikation ist eine Karte Ihrer API — einschließlich interner und undokumentierter Endpunkte — und ein Tool, das Sie bitten würde, sie zum Vergleichen hochzuladen, würde genau die Karte sammeln, die Sie privat halten sollten.

Welche Formate werden akzeptiert?

OpenAPI 3.x und Swagger 2.0, als JSON oder YAML. Der Text wird zuerst als JSON versucht und bei Misserfolg als YAML geparst. Ein Dokument muss ein paths-Objekt tragen, um als Spezifikation erkannt zu werden; alles andere wird als „keine Spezifikation“ gemeldet, statt still einen leeren Diff zu erzeugen.

Was zählt hier als Breaking Change?

Alles, was einen korrekt geschriebenen alten Client scheitern lassen kann: entfernte Pfade, Operationen oder Antwortstatus; Parameter oder Anfrageeigenschaften, die Pflicht wurden; Typ- oder Formatänderungen; entfernte Anfrage- oder Antworteigenschaften; und entfernte Enum-Werte. Alles Optionale hinzuzufügen ist nicht Breaking. Beschreibungs-, Titel- und Formatierungsänderungen werden vollständig ignoriert — sie sind keine Vertragsänderungen.

Wie werden referenzierte Schemata behandelt?

Lokale Referenzen wie #/components/schemas/Pet (oder #/definitions/Pet in Swagger 2.0) werden beim Aufbau der Signaturen aufgelöst, sodass eine Änderung in einem geteilten Schema bei jeder Operation berichtet wird, die es nutzt. Die Auflösung ist tiefenbegrenzt und zyklensicher, sodass rekursive Schemata den Vergleich nicht aufhängen können.

Kann ich ein Ergebnis archivieren oder teilen?

Ja. Die Download-Schaltfläche exportiert den vollständigen Diff als JSON — die Zähler der Zusammenfassung plus jede Änderung mit Schweregrad, Art, Pfad, Methode und strukturiertem Detail — und die Kopier-Schaltfläche erzeugt eine Klartext-Zusammenfassung für einen Pull Request oder eine Release-Notiz. Beide werden lokal aus dem Vergleich erzeugt, den Sie gerade ausgeführt haben.