gpt4 book ai didi

flask - 在 Flask Restplus 中注册的第二个蓝图不会大摇大摆地出现

转载 作者:行者123 更新时间:2023-12-03 16:07:16 25 4
gpt4 key购买 nike

给定这个 Flask Restplus 应用程序:

from flask import Blueprint, Flask
from flask_restplus import Api, Resource

base_api_blueprint = Blueprint('base_api', __name__)
base_api = Api(base_api_blueprint)

bff_api_blueprint = Blueprint('bff_api', __name__)
bff_api = Api(bff_api_blueprint)

@base_api.route('/base', endpoint='base-endpoint')
class BaseResource(Resource):
def get(self):
return {"from":"base"}


@bff_api.route('/bff', endpoint='bff-endpoint')
class BffResource(Resource):
def get(self):
return {"from":"bff"}

app = Flask(__name__)
app.register_blueprint(base_api_blueprint)
app.register_blueprint(bff_api_blueprint)
api = Api(app)

if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)

当我导航到位于 http://localhost:8080/ 的 swagger 文档时,我看到了 base_api_blueprint 的 swagger,但没有看到 bff_api_blueprint .如果我颠倒 register_blueprint 调用的顺序(因此 bff_api_blueprint 首先注册),则会发生相反的情况 -> bff_api_blueprint 的招摇显示, base_api_blueprint 没有任何内容。

无论 swagger 说什么,两个蓝图都是可操作的,即它们返回 HTTP 响应。

如何将两个蓝图的 swagger“合并”为一个?

最佳答案

从您的代码中,如果您想合并文档,那么您将使用一个 Api 实例,如下所示:

from flask import Blueprint, Flask
from flask_restplus import Api, Resource

base_api_blueprint = Blueprint('base_api', __name__)
# base_api = Api(base_api_blueprint)
api = Api(base_api_blueprint, doc="/combined/") #the end point to your combined documentation api

base_ns = api.namespace('base_api', description='Base API')
bff_ns = api.namespace('bff_api', description='Bff API')

# bff_api_blueprint = Blueprint('bff_api', __name__)
# bff_api = Api(bff_api_blueprint)

@base_ns.route('/base', endpoint='base-endpoint')
class BaseResource(Resource):
def get(self):
return {"from":"base"}


@bff_ns.route('/bff', endpoint='bff-endpoint')
class BffResource(Resource):
def get(self):
return {"from":"bff"}

app = Flask(__name__)
app.register_blueprint(base_api_blueprint)
# app.register_blueprint(bff_api_blueprint)
api = Api(app)

if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080, debug=True)

这种方法也使用命名空间,现在您的端点将像这样结束:

/combined/
/base_api/base
/bff_api/bff

如果您使用蓝图组织项目,则可以将相同的 api 实例导入项目的其他部分。来自 Flask-RESTplus documentation , 命名空间与 Flask 的蓝图是相同的模式。

关于flask - 在 Flask Restplus 中注册的第二个蓝图不会大摇大摆地出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50292855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com