Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python Enhancement Proposals

PEP 629 – Versionierung der einfachen PyPI-API

Autor:
Donald Stufft <donald at stufft.io>
BDFL-Delegate:
Brett Cannon <brett at python.org>
Discussions-To:
Discourse thread
Status:
Final
Typ:
Standards Track
Thema:
Packaging
Erstellt:
16-Jul-2020
Post-History:
16-Jul-2020

Inhaltsverzeichnis

Hinweis

Diese PEP wurde am 20.08.2020 akzeptiert. PyPI hat am eine Implementierung übernommen am 28.01.2020, was diese PEP als „Final“ markiert.

Zusammenfassung

Diese PEP schlägt die Hinzufügung einer Methode zur Versionierung der einfachen API vor, damit Clients feststellen können, welche Features der einfachen API ein bestimmtes Repository unterstützt.

Begründung

Bei der Weiterentwicklung der einfachen API möchten Clients feststellen können, welche Features das Repository unterstützt. Derzeit gibt es keinen Mechanismus dafür, außer dem Versuch, neue Features zu erkennen, indem man die Daten in den Antworten betrachtet und sieht, ob ein bestimmtes Feature verwendet wird.

Dies funktioniert für eine moderne Version eines Clients recht gut, um festzustellen, ob das Repository alle gewünschten Features unterstützt, aber es sagt einer älteren Version des Clients nichts darüber, dass das Repository Features unterstützt, die sie möglicherweise nicht versteht, und es erlaubt keine Nachrichten, die darauf hinweisen, dass die Ausgabe des Repositorys möglicherweise nicht richtig verstanden wird.

Ein Beispiel für ein solches Szenario war die schrittweise Einführung von python-requires-Metadaten. Während bestehende Clients das Repository weiterhin erfolgreich nutzen konnten, fehlte ihnen die Fähigkeit, diese neuen Daten zu verstehen, die ihr Verhalten beeinflusst hätten, um eine bessere Datei für Endbenutzer auszuwählen.

Übersicht

Diese PEP schlägt die Aufnahme eines Meta-Tags in die Antworten jeder erfolgreichen Anfrage an eine Seite der einfachen API vor, die ein Namensattribut „pypi:repository-version“ und einen Inhalt hat, der eine PEP 440-kompatible Versionsnummer ist. Diese wird weiter eingeschränkt, NUR Major.Minor zu sein, und keine der zusätzlichen Features, die von PEP 440 unterstützt werden.

Dies würde wie folgt aussehen:

<meta name="pypi:repository-version" content="1.0">

Bei der Interpretation der Repository-Version

  • Die Erhöhung der Hauptversion wird verwendet, um eine abwärtsinkompatible Änderung zu signalisieren, bei der bestehende Clients nicht mehr erwartet werden, die API sinnvoll nutzen zu können.
  • Die Erhöhung der Nebenversion wird verwendet, um eine abwärtskompatible Änderung zu signalisieren, bei der bestehende Clients immer noch erwartet werden, die API sinnvoll nutzen zu können.

Es liegt im Ermessen zukünftiger PEPs, was genau eine abwärtsinkompatible bzw. kompatible Änderung darstellt, über die allgemeine Empfehlung hinaus, dass bestehende Clients die API weiterhin „sinnvoll“ nutzen können, und kann das Hinzufügen, Ändern oder Entfernen bestehender Features umfassen.

Es ist die Erwartung dieser PEP, dass die Hauptversion niemals erhöht wird und zukünftige größere API-Entwicklungen einen anderen Mechanismus zur API-Entwicklung nutzen würden. Die Hauptversion ist jedoch enthalten, um Verwechslungen mit zukünftigen Versionen zu vermeiden (z. B. eine hypothetische einfache API v2, die unter /v2/ leben würde, die aber verwirrend wäre, wenn die Repository-Version auf eine Version >= 2 gesetzt wäre).

Diese PEP setzt die aktuelle API-Version auf „1.0“ und erwartet, dass zukünftige PEPs, die die einfache API weiterentwickeln, die Nebenversionsnummer erhöhen.

Clients

Clients, die mit der einfachen API interagieren, SOLLTEN jede Antwort auf die Repository-Version prüfen und, wenn diese Daten nicht vorhanden sind, MÜSSEN davon ausgehen, dass es sich um Version 1.0 handelt.

Wenn eine höhere Hauptversion als erwartet angetroffen wird, MÜSSEN Clients mit einer entsprechenden Fehlermeldung für den Benutzer hart fehlschlagen.

Wenn eine höhere Nebenversion als erwartet angetroffen wird, SOLLTEN Clients Benutzer mit einer entsprechenden Meldung warnen.

Clients KÖNNEN weiterhin Feature-Erkennung verwenden, um festzustellen, welche Features ein Repository nutzt.

Abgelehnte Ideen

Verwendung eines Headers

Anstatt diese Informationen in das eigentliche HTML zu integrieren, wäre eine Alternative die Verwendung eines HTTP-Headers. Diese Idee wurde in Betracht gezogen und letztendlich verworfen, da Spiegel damit beginnen müssten, Header zu ändern, anstatt als „dummer“ HTTP-Server für Dateien zu agieren.

Verwendung einer URL

Ein weiterer traditioneller Mechanismus zur Versionierung von APIs ist die Einbettung in die URL, wie z. B. „/1.0/simple/“ oder Ähnliches. Dies funktioniert gut für Hauptversionsänderungen, bei denen nicht erwartet wird, dass ältere Clients diese weiterhin nutzen können, aber es ist nicht gut für Nebenversions-Updates geeignet, insbesondere wenn die Versionsnummern weitgehend als ratsam für Endbenutzer betrachtet werden können.


Quelle: https://github.com/python/peps/blob/main/peps/pep-0629.rst

Zuletzt geändert: 2025-02-01 08:55:40 GMT