Я создаю очень сложный микросервис, используя Flask и Flask-Restplus. У него будет много конечных точек, поэтому я организую каждую конечную точку в отдельный план.
Следующий пример кода и структура каталогов должны дать вам представление о моей идее:
.
├── endpoints
│ ├── endpointa.py
│ ├── endpointb.py
│ ├── endpointc.py
│ └── __init__.py
├── __init__.py
└── run.py
Мой основной файл в этом.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 ничего не показывает:
Обычно я добавляю конечные точки в API, используя что-то вроде
api.add_resource(TestClass, api_prefix + 'test')
но это не представляется возможным с несколькими Blueprints.
Может ли кто-нибудь показать мне, как добавить/зарегистрировать эти Blueprints (endpointa_api, endpointb_api и endpointc_api) с помощью API?
Вы используете flask-restful или flask-restplus? Потому что вы описываете первый, а в примере используется последний.
Привет, извините, я обновил свой пост. Я использую flask-restplus и пытаюсь зарегистрировать все свои чертежи с помощью swagger.






Есть 2 возможных решения с использованием Flask-Restplus:
ApisВы можете прочитать об обоих в документации: https://flask-restplus.readthedocs.io/en/stable/scaling.html
Пространства имен
Flask-RESTPlus provides a way to use almost the same pattern as Flask’s blueprint. The main idea is to split your app into reusable namespaces.
from flask_restplus import Api
from .namespace1 import api as ns1
from .namespace2 import api as ns2
# ...
from .namespaceX import api as nsX
api = Api(
title='My Title',
version='1.0',
description='A description',
# All API metadatas
)
api.add_namespace(ns1)
api.add_namespace(ns2)
# ...
api.add_namespace(nsX)
Чертеж Апис
Here’s an example of how to link an Api up to a Blueprint.
from flask import Blueprint
from flask_restplus import Api
blueprint = Blueprint('api', __name__)
api = Api(blueprint)
# ...
Using a blueprint will allow you to mount your API on any url prefix and/or subdomain in you application:
from flask import Flask
from apis import blueprint as api
app = Flask(__name__)
app.register_blueprint(api, url_prefix='/api/1')
app.run(debug=True)
Спасибо. Blueprint Apis: это пример привязки API к ОДНОМУ Blueprint, но я хочу иметь возможность связать API с несколькими Blueprints.
Вы можете сделать то же самое для каждого чертежа. Просто позвоните Api(blueprint) для каждого и зарегистрируйте их в своем приложении.
Большое спасибо, я буду использовать пространства имен, которые лучше всего подходят для моих целей. :)
Привет @dacoda, если этот ответ помог вам, не могли бы вы пометить его как принятый, чтобы другим пользователям было ясно, что это сработало?
Как я могу просто перейти к одной конечной точке, чтобы просмотреть все мои конечные точки чванства? При этом мне нужно сделать http://localhost:5000/<url_prefix> там, где раньше мне не нужно было определять префикс URL-адреса моего пространства имен.
В чем преимущество использования пространств имен по сравнению со схемами?
Было бы неплохо, если бы примеры соответствовали коду вопроса. Этот пример показывает не что иное, как документы. Где автоматизированная документация вступает в игру с приведенным примером?
очень сложный микросервис - это какой-то оксюморон :)