Я создаю очень сложный микросервис, используя Flask и Flask-Restplus.
У него будет много конечных точек, поэтому я объединяю каждую конечную точку в отдельный 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():
...
Опять же: Я могу получить доступ к своим конечным точкам через почтальона, но пользовательский интерфейс swagger-UI не 'ничего не показывать:
Обычно я добавляю конечные точки в API, используя что-то вроде
api.add_resource(TestClass, api_prefix + 'test')
, но это некажется невозможным с несколькими Blueprints.
Может кто-нибудь показать мне, как добавить / зарегистрировать эти Blueprints (endpointa_api, endpointb_api и endpointc_api) с Api?