FastAPI обеспечивает доступ к Swagger с помощью кастомной статики для документации (Swagger, Redoc)

Posted by


Для того чтобы вернуть доступ к Swagger и создать кастомную статику для документации (swagger, redoc) в FastAPI, нам нужно реализовать несколько шагов.

Шаг 1: Установка FastAPI и зависимостей

Первым делом необходимо установить FastAPI и uvicorn (для запуска приложения FastAPI):

pip install fastapi uvicorn

Затем необходимо установить зависимости для работы с Swagger и Redoc:

pip install fastapi.openapi fastapi.templating starlette

Шаг 2: Создание приложения FastAPI

Создаем файл main.py и инициализируем приложение FastAPI:

from fastapi import FastAPI

app = FastAPI()

Шаг 3: Добавление Swagger и Redoc

Чтобы добавить доступ к Swagger и Redoc, необходимо добавить соответствующие маршруты в приложение:

from fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html
from fastapi.openapi.utils import get_openapi

@app.get("/docs", include_in_schema=False)
async def custom_swagger_ui_html():
    return get_swagger_ui_html(openapi_url="/openapi.json", title="Swagger UI")

@app.get("/redoc", include_in_schema=False)
async def redoc_html():
    return get_redoc_html(openapi_url="/openapi.json", title="Redoc")

Здесь мы добавляем два маршрута /docs и /redoc для Swagger и Redoc соответственно.

Шаг 4: Указание путей к документации

Далее необходимо указать путь к документации, которую будем использовать для Swagger и Redoc:

from fastapi.responses import HTMLResponse

@app.get("/openapi.json", include_in_schema=False)
async def get_open_api_endpoint():
    return JSONResponse(get_openapi())

@app.get("/", response_class=HTMLResponse)
async def home():
    return """
    <html>
        <head>
            <title>Custom Documentation</title>
        </head>
        <body>
            <h1>Welcome to Custom Documentation</h1>
            <p><a href="/docs">Swagger UI</a></p>
            <p><a href="/redoc">Redoc</a></p>
        </body>
    </html>
    """

Шаг 5: Запуск приложения

Теперь необходимо запустить приложение FastAPI с помощью uvicorn:

uvicorn main:app --reload

После запуска приложения можно открыть браузер и перейти по адресу http://127.0.0.1:8000/, чтобы увидеть кастомную статику для документации, а также доступ к Swagger и Redoc.

Теперь у вас есть доступ к Swagger и кастомной статике для документации в вашем приложении FastAPI. Надеюсь, что этот туториал был полезен!

0 0 votes
Article Rating
9 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@Alex-zl7wg
1 month ago

Превосходная подача материала! Всё подробно и в то же время ничего лишнего. Преподавать ваше призвание! Спасибо за курс.

@andreymartynov3958
1 month ago

Лайк на 2-й минуте. Спасибо!

@YuriyPogrebinsky
1 month ago

Обидно другое, зачем вообще было делать внешнюю зависимость? Развернул внутри периметра, обращается с ПК без инета и всё, нет документации.

@ObitoUchiha-sb7vm
1 month ago

А мне просто остановка загрузки страницы и её дальнейшая загрузка помогают

@ДаниилСоловьев-э6ш
1 month ago

Столкнулся сегодня с этой проблемой при развертывании на удаленном хосте! Думал, что это фастапи шалит, но видимо дело было все-таки в статике. Спасибо, Сурен, как всегда, всё по полочкам разложил!

@tremasafaka
1 month ago

Тупа лучший!

@IvaNFallout
1 month ago

Спасибо, Сурен. Все четко: есть проблема и есть такое решение. Мы похожую проблему решили добавлением в контейнер приложения локальной статики js+css

@Alcoholdehydrogenas
1 month ago

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

@ctsrazor
1 month ago

Подмечу что проблема впринципе со swagger, это и в django-ninja и в litestar такая же проблема была)