Как кастомизировать Swagger UI в Python веб-фреймворках?

Ответ

Swagger UI можно гибко настраивать в Python-фреймворках с помощью специализированных библиотек. Наиболее популярные решения — flasgger для Flask и drf-yasg / drf-spectacular для Django REST Framework.

Они позволяют изменять как метаданные API, так и внешний вид самой документации.

Основные возможности кастомизации:

  • Метаданные: Заголовок (title), версия (version), описание (description).
  • URL: Изменение пути к документации (например, с /docs на /api/docs).
  • Авторизация: Добавление кнопок и схем авторизации (ApiKey, Bearer JWT).
  • Внешний вид: Подключение кастомных CSS для изменения цветовой схемы и логотипа.

Пример для Flask с flasgger:

from flask import Flask
from flasgger import Swagger

app = Flask(__name__)

# Конфигурация для кастомизации Swagger
swagger_config = {
    "headers": [],
    "specs": [
        {
            "endpoint": 'apispec_1',
            "route": '/apispec_1.json',
        }
    ],
    "static_url_path": "/flasgger_static",
    "swagger_ui": True,
    "specs_route": "/apidocs/", # Кастомный URL
    "title": "My Custom API", # Кастомный заголовок
    "version": "2.0.0",
    "description": "Это описание моего кастомного API"
}

swagger = Swagger(app, config=swagger_config)

@app.route('/')
def index():
    """Это главная страница.
    ---
    responses:
      200:
        description: Успешный ответ
    """
    return "Hello, World!"

if __name__ == '__main__':
    app.run(debug=True)

После запуска документация будет доступна по адресу http://127.0.0.1:5000/apidocs/ с указанными заголовком и описанием.

Ответ 18+ 🔞

Ах ты ж, блядь, смотри-ка, Swagger UI! Ну, это ж как та собака Муму, только для API — вроде и полезная штука, а если не настроить, так и утопить в озере захочется, ёпта.

Так вот, в этих ваших Python-фреймворках его можно настраивать так, что мамка не горюй. Есть спец-библиотеки, которые как Герасим — здоровые, молчаливые, но если что, так впердолят такую кастомизацию, что охуеешь.

Основные плюшки, которые можно вытворять:

  • Метаданные: Менять заголовок, версию, описание — ну, как табличку на двери перевесить, блядь.
  • URL: Путь к документации поменять, чтоб не /docs, а, допустим, /api/docs — типа спрятать от лишних глаз, хитрая жопа.
  • Авторизация: Кнопочки добавить для входа, схемы эти ваши ApiKey или Bearer JWT прикрутить — чтоб не всякий пиздопроебибна зашёл.
  • Внешний вид: CSS свой подсунуть, цвета поменять, логотип воткнуть — чтоб не как у всех, падлы.

Смотри, как в Flask с flasgger это выглядит, блядь:

from flask import Flask
from flasgger import Swagger

app = Flask(__name__)

# А вот тут мы его, сука, конфигурируем
swagger_config = {
    "headers": [],
    "specs": [
        {
            "endpoint": 'apispec_1',
            "route": '/apispec_1.json',
        }
    ],
    "static_url_path": "/flasgger_static",
    "swagger_ui": True,
    "specs_route": "/apidocs/", # Свой URL, чтоб не палиться
    "title": "My Custom API", # Свой заголовок, овердохуищный
    "version": "2.0.0",
    "description": "Это описание моего кастомного API" # Ну и пояснительная записка, бля
}

swagger = Swagger(app, config=swagger_config)

@app.route('/')
def index():
    """Это главная страница.
    ---
    responses:
      200:
        description: Успешный ответ
    """
    return "Hello, World!"

if __name__ == '__main__':
    app.run(debug=True)

Запустишь это дело, и твоя документация будет торчать уже не где попало, а по адресу http://127.0.0.1:5000/apidocs/, да ещё и с твоим фирменным шильдиком. Красота, ёпта, а не жизнь. Главное — не перемудрить, а то получится как у того Герасима: хотел как лучше, а в итоге Муму утопил, блядь.