Unterstützt mehrere API-Versionen in der Flasche
Begann ich das design eines RESTful-webservice mit Kolben und Python, und ich Frage mich, wie würde man die Unterstützung von mehreren API-Versionen im selben Projekt.
Ich bin am überlegen, setzen die angeforderte API-version in die URL wie folgt:
/myapp/v1/Users
Nach einiger Zeit möchte ich hinzufügen, dass ein weiterer Endpunkt in der Version 1.1 der API und halten alles aus v1, die nicht zu ändern:
/myapp/v1.1/Users <= Same as in v1
/myapp/v1.1/Books
In v2 die "Benutzer"-Endpunkt geändert:
/myapp/v2/Users <= Changed in v2
/myapp/v2/Books <= Same as in v1.1
und so weiter...
Blick auf diese Frage, die einfachste Möglichkeit wäre wahrscheinlich so etwas wie dieses:
@app.route('/<version>/users')
def users(version):
# do something
return jsonify(response)
Aber ich kann mir vorstellen, dass dies schwieriger zu halten und mit jeder neuen API-version. Also ich Frage mich, ob es nicht besser (= leichter zu pflegen und besser strukturiert) Weise zu erreichen, das mit Fläschchen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin der Autor von die akzeptierte Antwort auf die Frage, die Sie referenziert. Ich denke, die
/<version>/users
Ansatz ist nicht sehr effektiv ist, wie Sie sagen. Wenn Sie zu bewältigen haben drei oder vier verschiedene Versionen werden Sie am Ende mit spaghetti-code.Des nginx Idee habe ich vorgeschlagen, es ist besser, hat aber den Nachteil, dass Sie Gastgeber zwei separate Anwendungen. Ich habe damals verpasst, zu schweigen von einer Dritten alternative, die eine Blaupause für jede API-version. Betrachten Sie beispielsweise die folgenden app-Struktur (stark vereinfacht für die Klarheit):
Hier haben Sie eine
api/common.py
implementiert, dass gemeinsame Funktionen, die alle API-Versionen benötigen. Zum Beispiel, können Sie eine Hilfsfunktion (nicht eingerichtet als route), die eine Antwort auf Ihre/users
route, die identisch ist in v1 und v1.1.Den
routes.py
für jede API-version definieren der Routen, und wenn nötig, rufen Sie incommon.py
Funktionen zur Vermeidung einer doppelten Logik. Zum Beispiel, Ihr v1 und v1.1routes.py
haben kann:Hinweis: die
api.route
. Hierapi
ist eine Blaupause. Mit jeder API-version implementiert, die als Blaupause hilft vereinen alles, was mit der richtigen versionierten URLs. Hier ist eine Beispiel-app setup-code, der Importe der API-Blaupausen in der Anwendung Beispiel:Diese Struktur ist sehr schön, da es hält alle API-Versionen separate, aber Sie sind gedient durch die gleiche Anwendung. Als zusätzlichen Vorteil, wenn die Zeit kommt, um mehr unterstützen v1, die Sie gerade entfernen Sie die
register_blueprint
Anruf für diese version, löschen Sie diev1
Paket von Ihren Quellen und Sie sind fertig.Jetzt, mit dieser sagte, sollten Sie wirklich machen Sie eine Anstrengung, um Ihre design-API in einer Weise, die minimiert das Risiko, dass rev die version. Berücksichtigen Sie, dass das hinzufügen von neuen Routen nicht erforderlich, eine neue API-version, es ist völlig in Ordnung, zum erweitern einer API mit neuen Routen. Und änderungen in bestehenden Routen kann manchmal in einer Weise, die keine Auswirkungen auf alte Kunden. Manchmal ist es weniger schmerzhaft zu rev der API und haben mehr Freiheit, um die Dinge zu ändern, aber im Idealfall, dass nicht allzu oft vorkommt.
environ
Wörterbuch. Viel Glück!