2016-04-07 8 views
0

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へのすべての呼び出しを各バージョンの名前に変更すると、バージョン管理が苦しくなり全体的にコードが混乱することになります。

これを行うより良い方法はありますか?

答えて

0

わかりましたので、私は青写真の定義を変更するだけでした。

私は両方の青写真をapi = Blueprint('api', __name__)と定義する前に、衝突を引き起こし、変数apiの名前を変更する必要があると思いました。

私は本当に変更するために必要なものをオンは、Blueprintへの呼び出しで使用される単なる文字列'api'あるので、今、私の青写真をapi = Blueprint('api_2_0', __name__)api = Blueprint('api_2_1', __name__)のように定義されている、私は両方のケースで同じ変数apiを維持できるように、私を節約しますそれをどこにでも突きつける問題。

これはかなり愚かな質問だったが、私は誰かが同じ問題を抱えている場合に備えてここに残しておきます。

+1

両方の引数に '__name__'を使用できるたびに、その特定の文字列で厄介なものを保存するには、私は信じています。 –

関連する問題