鉴于此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的swagger。如果我颠倒了register_blueprint调用的顺序(因此首先注册了bff_api_blueprint ),则bff_api_blueprint的swagger显示的情况正好相反,没有任何base_api_blueprint。
不管swagger说什么,这两个蓝图都是可操作的,即它们返回HTTP响应。
我如何才能将两个蓝图的夸张“合并”成一个蓝图?
发布于 2018-09-11 22:48:31
从您的代码中,如果您想组合文档,那么您将使用一个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的蓝图相同。
发布于 2019-11-11 06:10:25
为了让两个蓝图都显示在各自的页面上,您需要在蓝图定义中使用"url_prefix“参数,如下所示:
from flask import Blueprint, Flask
from flask_restplus import Api, Resource
base_api_blueprint = Blueprint('base_api', __name__, url_prefix="base_api")
base_api = Api(base_api_blueprint)
bff_api_blueprint = Blueprint('bff_api', __name__, url_prefix="bff_api")
bff_api = Api(bff_api_blueprint)每个蓝图都有一个可以在http://localhost:8080/base_api和http://localhost:8080/bff_api上找到的夸张页面。
另一方面,如果您希望两个端点同时出现,那么方法就是使用单个Blueprint和多个名称空间。
https://stackoverflow.com/questions/50292855
复制相似问题