Какие типы ответов можно возвращать в эндпоинтах FastAPI

Ответ

FastAPI предоставляет гибкие возможности для возврата различных типов ответов, автоматически выполняя сериализацию данных и установку корректного Content-Type заголовка.

Основные типы возвращаемых данных:

  1. Модели Pydantic Это основной и рекомендуемый способ. FastAPI автоматически преобразует модель в JSON, валидирует данные ответа и генерирует OpenAPI схему.

    from pydantic import BaseModel
    
    class Item(BaseModel):
        name: str
        price: float
    
    @app.get("/items/1", response_model=Item)
    def get_item():
        return Item(name="My Item", price=10.5)
  2. Словарь (dict) или список (list) Любой dict или list будет автоматически сериализован в JSON.

    @app.get("/info")
    def get_info():
        return {"version": "1.0", "status": "ok"}
  3. Объекты Response Для полного контроля над ответом (статус-код, заголовки, cookies) можно напрямую вернуть экземпляр класса Response или его наследников.

    from fastapi import Response
    
    @app.get("/legacy")
    def get_legacy_data():
        data = "<data>some_xml</data>"
        return Response(content=data, media_type="application/xml")
  4. Специализированные классы Response FastAPI предоставляет готовые классы для распространенных задач:

    • JSONResponse: для явного возврата JSON с кастомными заголовками.
    • HTMLResponse: для возврата HTML-страниц.
    • PlainTextResponse: для простого текста.
    • RedirectResponse: для выполнения HTTP-перенаправлений.
    • FileResponse: для отправки файла из файловой системы.
    • StreamingResponse: для потоковой передачи данных (например, при генерации большого файла).
    from fastapi.responses import HTMLResponse, RedirectResponse
    
    @app.get("/home", response_class=HTMLResponse)
    def home():
        return "<h1>Welcome Home</h1>"
    
    @app.get("/docs-redirect")
    def redirect_to_docs():
        return RedirectResponse(url="/docs")
  5. Простые типы Можно возвращать и простые типы, такие как str, int, bytes. FastAPI автоматически обернет их в соответствующий Response (например, PlainTextResponse для str).