Swagger с Flask-Restplus, API и несколькими чертежами

Я создаю очень сложный микросервис, используя Flask и Flask-Restplus. У него будет много конечных точек, поэтому я организую каждую конечную точку в отдельный план.

  • В настоящее время я борюсь с использованием Flask-Restplus и API использование нескольких чертежей в сочетании с swaggerм.
  • Я хочу иметь возможность получить все конечные точки моих чертежей во встроенном чванстве API, но, похоже, это не работает.
  • Я могу получить доступ к своим конечным точкам через почтальона, но пользовательский интерфейс swagger ничего не показывает. :(

Следующий пример кода и структура каталогов должны дать вам представление о моей идее:

.
├── 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 ничего не показывает:

Swagger с Flask-Restplus, API и несколькими чертежами

Обычно я добавляю конечные точки в API, используя что-то вроде

api.add_resource(TestClass, api_prefix + 'test')

но это не представляется возможным с несколькими Blueprints.

Может ли кто-нибудь показать мне, как добавить/зарегистрировать эти Blueprints (endpointa_api, endpointb_api и endpointc_api) с помощью API?

очень сложный микросервис - это какой-то оксюморон :)

Adrian Krupa 22.02.2019 14:38

Вы используете flask-restful или flask-restplus? Потому что вы описываете первый, а в примере используется последний.

Adrian Krupa 22.02.2019 14:55

Привет, извините, я обновил свой пост. Я использую flask-restplus и пытаюсь зарегистрировать все свои чертежи с помощью swagger.

dacoda 25.02.2019 09:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
7
3
7 691
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть 2 возможных решения с использованием Flask-Restplus:

  • Используйте пространства имен Flask-RestPlus
  • Превратите свои чертежи в 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.

dacoda 25.02.2019 11:10

Вы можете сделать то же самое для каждого чертежа. Просто позвоните Api(blueprint) для каждого и зарегистрируйте их в своем приложении.

Robbe 25.02.2019 15:24

Большое спасибо, я буду использовать пространства имен, которые лучше всего подходят для моих целей. :)

dacoda 01.03.2019 09:13

Привет @dacoda, если этот ответ помог вам, не могли бы вы пометить его как принятый, чтобы другим пользователям было ясно, что это сработало?

Robbe 07.03.2019 09:27

Как я могу просто перейти к одной конечной точке, чтобы просмотреть все мои конечные точки чванства? При этом мне нужно сделать http://localhost:5000/<url_prefix> там, где раньше мне не нужно было определять префикс URL-адреса моего пространства имен.

frlzjosh 06.07.2021 09:56

В чем преимущество использования пространств имен по сравнению со схемами?

Teharez 28.07.2021 08:57

Было бы неплохо, если бы примеры соответствовали коду вопроса. Этот пример показывает не что иное, как документы. Где автоматизированная документация вступает в игру с приведенным примером?

Dean Martin 24.11.2021 17:26

Другие вопросы по теме