[英]Create Flask Restx endpoints without namespaces
我正在使用 Flask-restx 重新設計 API 和 Flask,但我有一個問題:出於兼容性原因,我們需要接受舊網址的 API 的舊版本,但我不明白如何這樣做是因為 flask-restx 需要聲明一個命名空間。
網址應該是這樣的:
{{host}}/api/v1/art/savegallery <- new one
{{host}}/savegallery <- legacy
在 Flask 我有這樣的東西:
應用程序/初始化.py
db = SQLAlchemy()
migrate = Migrate()
cors = CORS()
def create_app(config_class=DevelopmentConfig):
app = Flask(__name__)
app.config.from_object(config_class)
db.init_app(app=app)
migrate.init_app(app=app, db=db)
cors.init_app(app=app)
from app.api import api_bp, legacy_bp
app.register_blueprint(api_bp, url_prefix='/api/v1')
app.register_blueprint(legacy_bp)
return app
/應用程序/API/初始化.py
api_bp = Blueprint('v1', __name__)
legacy_bp = Blueprint('legacy', __name__)
api_v1 = Api(
app=api_bp,
version='1.00',
title='Art',
description=(
"API"
),
)
api_lgc = Api(
app=legacy_bp,
version='1.00',
title='Art Legacy',
description=(
"API Legacy"
),
)
from app.art.routes import art_ns
api_v1.add_namespace(art_ns)
api_lgc.add_namespace(art_ns)
應用程序/藝術/routes.py
art_ns = Namespace(name='art', description='Art Storage')
#artlegacy_ns = Namespace(name='legacy', description='Art Storage')
@art_ns.route('/savegallery')
class GalleryAPI(Resource):
def get(self):
try:
#data = request.json
data = {}
return {"foo":"bar"}, 200
except Exception as e:
print(e)
return {"error": "Something happened"}, 500
有了這個,我可以正確訪問{{host}}/api/v1/art/savegallery
但我找不到聲明舊版的方法,因為以這種方式創建 url 至少需要 url 的命名空間部分. Flask-restx 是否有辦法聲明這些 URL 和/或將流重定向到新的 URL?
對於任何想知道我是如何解決這個問題的人,我只是做了一個小技巧:
/應用程序/API/初始化.py
legacy_bp = Blueprint('legacy', __name__)
api_lgc = Api(
app=legacy_bp,
version='1.00',
title='Art Legacy',
description=(
"API Legacy"
),
)
@legacy_bp.route('/savegallery/', methods=['POST'])
def saveGallery():
return redirect('/api/art/savegallery/', code=307)
有了這個,我從遺留的 API 中刪除了命名空間,並且只聲明每個 URL 以重定向到所需的一個。 它現在似乎工作,但我不確定這是否是最好的解決方案,或者它是否可能更好,但目前這似乎是答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.