首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Flask Restplus中注册的第二个蓝图未在swagger中显示

在Flask Restplus中注册的第二个蓝图未在swagger中显示
EN

Stack Overflow用户
提问于 2018-05-11 20:55:41
回答 2查看 2.6K关注 0票数 3

鉴于此Flask Restplus应用程序:

代码语言:javascript
复制
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响应。

我如何才能将两个蓝图的夸张“合并”成一个蓝图?

EN

回答 2

Stack Overflow用户

发布于 2018-09-11 22:48:31

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

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
/combined/
/base_api/base
/bff_api/bff

如果您已经使用蓝图组织了项目,则可以将相同的api实例导入到项目的其他部分。在Flask-RESTplus documentation中,命名空间与Flask的蓝图相同。

票数 1
EN

Stack Overflow用户

发布于 2019-11-11 06:10:25

为了让两个蓝图都显示在各自的页面上,您需要在蓝图定义中使用"url_prefix“参数,如下所示:

代码语言:javascript
复制
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_apihttp://localhost:8080/bff_api上找到的夸张页面。

另一方面,如果您希望两个端点同时出现,那么方法就是使用单个Blueprint和多个名称空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50292855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档