flask_restplus не генерирует надлежащий интерфейс Swagger - PullRequest
0 голосов
/ 08 февраля 2019

Хорошо. У меня есть проект в следующей структуре в PyCharm:

enter image description here

Содержимое test_ns.py выглядит следующим образом:

from flask_restplus import Api
from flask_restplus import Resource
from flask_restplus import reqparse

api = Api(version='1.0', title='My Blog API',
          description='A simple demonstration of a Flask RestPlus powered API')

ns = api.namespace('blog/posts', description='Operations related to blog posts')

parser = reqparse.RequestParser()
parser.add_argument('Hello', required=True, location='form')


@ns.route('/')
class PostsCollection(Resource):

    @api.expect(parser)
    def get(self):
        """
        Returns list of blog posts.
        """

        return "Hello World from Swagger"

Содержимое server.py выглядит следующим образом:

from web.test_ns import ns, api
from flask import Flask, Blueprint

app = Flask(__name__)


def configure_app(flask_app):
    flask_app.config['SWAGGER_UI_DOC_EXPANSION'] = 'List'
    flask_app.config['RESTPLUS_VALIDATE'] = True
    flask_app.config['RESTPLUS_MASK_SWAGGER'] = False


def initialize_app(flask_app):
    configure_app(flask_app)

    blueprint = Blueprint('api', __name__, url_prefix='/api')

    api.init_app(blueprint)
    api.add_namespace(ns)

    flask_app.register_blueprint(blueprint)


def main():
    initialize_app(app)
    app.run(host="127.0.0.1", port="5000")


if __name__ == '__main__':
    main()

Проблема в том, что я не получаю соответствующий интерфейс Swagger.Когда я запускаю server.py и открываю его в своем браузере, я получаю следующее:

enter image description here

По сути, это не тот пользовательский интерфейс Swagger, который мне нужен,

То, что я хочу, это то, что рекламируется на сайте flask_restplus :

enter image description here

Я просто не могу понять, чтоЯ делаю не так.

Я прошел проект на GitHub здесь , но я не могу понять, что я делаю по-другому или неправильно.Проект использует те же пакеты для Swagger, что и я, но я не могу получить правильный вывод.Куда я иду не так?

Инструкции по запуску проекта GitHub можно найти здесь .

Единственное отличие моего проекта от GitHub в том, что позже используется только больше модулей.

Глядя на журнал сервера Flask, я вижу, что проект GitHub делает намного больше обращений к бэкэнду для генерации пользовательского интерфейса:

enter image description here

Пока я делаю только небольшое количество звонков, чтобы сгенерировать мой неверный интерфейс Swagger:

* Serving Flask app "server" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [08/Feb/2019 23:37:00] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [08/Feb/2019 23:37:04] "GET /api/ HTTP/1.1" 200 -
127.0.0.1 - - [08/Feb/2019 23:37:04] "GET /swaggerui/favicon-16x16.png HTTP/1.1" 200 -
127.0.0.1 - - [08/Feb/2019 23:37:04] "GET /api/swagger.json HTTP/1.1" 200 -

В чем причина разницы?

Я искал документы, но ничего не могу найти.Чего мне не хватает?

Даже при использовании примера с сайта flask_restplus не удается получить правильный интерфейс Swagger, как было объявлено.

Что такого волшебного в этомпроект GitHub, почему это единственный проект, который работает?Что он делает правильно, что я явно не так.

1 Ответ

0 голосов
/ 10 февраля 2019

Оба изображения представляют собой Swagger UI, только разные его версии.

  • 1-е изображение (что вы получаете) в Swagger UI v. 3, которое является текущей версией UI.Вы можете увидеть это в официальной демонстрационной версии Swagger UI по адресу https://pestore.swagger.io.

  • 2-е изображение (из документов flask_restplus) - это Swagger UI v 2, старая версия, которая больше не разрабатывается / не поддерживается.

flask_restplus работает, как и ожидалось, поддерживая свои зависимости (включая Swagger UI) в актуальном состоянии.Проблема заключается в документации * * * *, которая находится на flashk_restplus и содержит устаревший скриншот пользовательского интерфейса Swagger, который отличается от того, что получают пользователи.Рассмотрите возможность подачи запроса на обновление документации в проекте flask_restplus.

...