Die Zeit ist gekommen, in der ich eine neue Version für meine API freigeben muss und die vorherige noch unterstütze.API Versionsverwaltung mit Blueprints verursacht Spalte
Ich folgte den Anweisungen in der angenommenen Antwort für this question. Leider habe ich nicht genug Rep in den Kommentaren dieser Antwort zu fragen.
Ich habe eine Struktur-Anwendung, die wie folgt aussieht:
+-- app/
+-- api_2_0/
+-- __init__.py
(...)
+-- api_2_1/
+-- __init__.py
(...)
+-- __init__.py
Beide sind Entwürfe, die ich auf diese Weise in meinem __init__.py
im create_app
Methode initialisieren (Ich verwende die app factory-Methode):
def create_app(config_name):
app = Flask(__name__)
(...)
from .api_2_0 import api as api_2_0_blueprint
app.register_blueprint(api_2_0_blueprint, url_prefix='/api/v2.0')
from .api_2_1 import api as api_2_1_blueprint
app.register_blueprint(api_2_1_blueprint, url_prefix='/api/v2.1')
Aber diese Ursachen:
AssertionError: A blueprint's name collision occurred between <flask.blueprints.Blueprint object at 0x7f8e48e82c10> and <flask.blueprints.Blueprint object at 0x7f8e48ef7150>. Both share the same name "api". Blueprints that are created on the fly need unique names.
Es stimmt, dass beide in ihren Ordnern api
genannt werden, aber ich importiere sie mit anderen Namen. Alle Aufrufe an api
in etwas anderes für jede Version umbenennen zu müssen, würde die Versionierung schmerzhaft machen und insgesamt zu einem Code-Durcheinander führen.
Gibt es einen besseren Weg, dies zu tun?
Um jedes Mal, wenn Sie '__name__' für beide Argumente verwenden könnten, das Durcheinander mit dieser bestimmten Zeichenfolge zu speichern, glaube ich. –