Второй проект, зарегистрированный во Flask Restplus, не отображается в чванстве - PullRequest
0 голосов
/ 11 мая 2018

Учитывая это приложение 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/, я вижу чванство для base_api_blueprint, но ничего для bff_api_blueprint. Если я переверну порядок вызовов register_blueprint (таким образом, сначала регистрируется bff_api_blueprint), произойдет обратное -> показывает чванство для bff_api_blueprint, ничего не для base_api_blueprint.

Независимо от того, что говорит чванец, оба чертежа работают, то есть возвращают HTTP-ответы.

Как я могу "объединить" чванство обоих чертежей в один?

1 Ответ

0 голосов
/ 11 сентября 2018

Из вашего кода, если вы хотите объединить документацию, вы будете использовать один экземпляр 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 пространство имен совпадает с шаблоном Flask.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...