APIの新しいバージョンをリリースし、前のバージョンをサポートする必要がある時が来ています。青写真を使用したAPIのバージョン管理でコリジョンが発生する
this questionの受け入れられた回答に記載されている指示に従っています。残念ながら、私はその回答のコメントに尋ねるのに十分な担当者がいません。
私はこのようになりますアプリの構造を持っている:
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')
:
+-- app/
+-- api_2_0/
+-- __init__.py
(...)
+-- api_2_1/
+-- __init__.py
(...)
+-- __init__.py
はどちらも私がcreate_app
方法(私はapp factoryメソッドを使用しています)で、私の__init__.py
にこの方法を初期化する青写真です
しかし、これが発生します
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.
両者はフォルダ内にapi
と呼ばれていますが、別の名前でインポートしています。 api
へのすべての呼び出しを各バージョンの名前に変更すると、バージョン管理が苦しくなり全体的にコードが混乱することになります。
これを行うより良い方法はありますか?
両方の引数に '__name__'を使用できるたびに、その特定の文字列で厄介なものを保存するには、私は信じています。 –