I'm building a very complex microservice using Flask and Flask-Restplus.
It will have many endpoints, thus I'm organizing each endpoint into a separate Blueprint.
- В настоящее время я борюсь с использованием Flask-Restplus и API с использованием нескольких Blueprints в сочетании с swagger.
- Я хочу получить все конечные точки моих чертежей во встроенном API-интерфейсе, но это, похоже, не работает.
- Я могу получить доступ к своим конечным точкам через почтальона, но пользовательский интерфейс swagger ничего не показывает. :(
Следующий пример кода и структура каталогов должны подсказать вам мою идею:
.
├── endpoints
│ ├── endpointa.py
│ ├── endpointb.py
│ ├── endpointc.py
│ └── __init__.py
├── __init__.py
└── run.py
Мой основной init .py выглядит так:
from flask import Flask, Blueprint, logging, jsonify, request, Response
from flask_restplus import Resource, Api
# create app and api
app = Flask(__name__)
api_prefix = '/api/v1/'
# register Blueprints
from endpoints.endpointa import endpointa_api
app.register_blueprint(endpointa_api, url_prefix=api_prefix)
from endpoints.endpointb import endpointb_api
app.register_blueprint(endpointb_api, url_prefix=api_prefix)
from endpoints.endpointc import endpointc_api
app.register_blueprint(endpointc_api, url_prefix=api_prefix)
api = Api(app,
version='1',
title='Test Service REST-API',
description='A REST-API for the Test Service, implemented in python')
if __name__ == '__main__':
app.run(debug=True, host="0.0.0.0", port=5060)
endpointa.py с соответствующим Blueprint:
from os import environ
import json, ast, syslog
import requests
import gc
from flask import Flask, Blueprint, logging, jsonify, request, Response
from flask_restplus import Resource, Api
endpointa_api = Blueprint('endpointa_api', __name__)
@endpointa_api.route('testa', methods=['GET'])
def testa():
...
@endpointa_api.route('testa/<string:testa_id>', methods=['GET', 'POST'])
def testa_id():
...
Again: I can access my endpoints via postman, but the swagger-UI doesn't show anything:
Обычно я добавляю конечные точки в API, используя что-то вроде
api.add_resource(TestClass, api_prefix + 'test')
но, похоже, это невозможно с несколькими Blueprints.
Can anyone show me how to add/register these Blueprints (endpointa_api, endpointb_api and endpointc_api) with Api ?