Как создать страницу документов OpenAPI (пользовательский интерфейс Swagger) с помощью статики .файл yaml с колбой?

#python #flask #swagger-ui #openapi

Вопрос:

Я работаю на сервере RESTful API flask, и мне нужно создать конечную точку для визуализации моего API с помощью статического файла (.yaml). Я пробовал flask_swagger_ui, но не смог понять, как указать путь к локальному файлу. Я совсем новичок в разработке RESTful API и серверов flask, поэтому был бы рад получить несколько советов, как правильно делать то, что я хочу.

Комментарии:

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

Ответ №1:

Предполагая, что у вас есть файл спецификации, называемый openapi.yaml . Если вы хотите самостоятельно разместить документы API, вы можете выполнить следующие действия:

  1. Создайте файл с именем app.py , затем создайте два представления для представления файла спецификаций и страницы пользовательского интерфейса Swagger:
 from flask import Flask, render_template, send_from_directory

app = Flask(__name__)


@app.route('/docs')
def swagger_ui():
    return render_template('swagger_ui.html')


@app.route('/spec')
def get_spec():
    return send_from_directory(app.root_path, 'openapi.yaml')
 
  1. Создайте шаблон, называемый swagger_ui.html в templates папке со следующим содержимым:
 <!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>Swagger UI</title>
    <link rel="stylesheet" type="text/css" href="https://unpkg.com/swagger-ui-dist@3//swagger-ui.css" >
    <style>
      html
      {
        box-sizing: border-box;
        overflow: -moz-scrollbars-vertical;
        overflow-y: scroll;
      }

      *,
      *:before,
      *:after
      {
        box-sizing: inherit;
      }

      body
      {
        margin:0;
        background: #fafafa;
      }
    </style>
  </head>

  <body>
    <div id="swagger-ui"></div>

    <script src="https://unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
    <script src="https://unpkg.com/swagger-ui-dist@3/swagger-ui-standalone-preset.js"></script>
    <script>
      window.onload = function() {
      const ui = SwaggerUIBundle({
        url: "{{ url_for('get_spec') }}",
        dom_id: '#swagger-ui',
        deepLinking: true,
        presets: [
          SwaggerUIBundle.presets.apis,
          SwaggerUIStandalonePreset
        ],
        plugins: [
          SwaggerUIBundle.plugins.DownloadUrl
        ],
        layout: "BaseLayout"
      })
    }
    </script>
  </body>
</html>
 

Окончательная структура файла будет выглядеть следующим образом:

 - app.py
- templates
    - swagger_ui.html
- openapi.yaml
 
  1. Теперь запустите приложение с:
 $ flask run
 
  1. Затем перейдите к http://localhost:5000/docs.