Задать вопрос
seven5674
@seven5674
Старый я уже что бы что-то в себе менять

Как правильно — Response Model vs Function Return Type?

Приветствую,

Какой способ правильнее использовать ?

Вариант №1
@app.get("/portal1", response_model=MyModel)
async def get_portal1() -> Any:
    result = {"name1": "name", "age": 10}
    return result


или

Вариант №2
@app.get("/portal2")
async def get_portal2() -> MyModel:
    result = {"name1": "name", "age": 10}
    return MyModel(**result)


Документация пестрит примерами с response_model
ИИ говорит что return type правильнее

Из того что заметил - Вариант №1 с response_model выдает более читаемую информацию по ошибке в случае возникновения таковой

...
fastapi.exceptions.ResponseValidationError: 1 validation error:
  {'type': 'missing', 'loc': ('response', 'name'), 'msg': 'Field required', 'input': {'name1': 'name', 'age': 10}}
  File ".../main.py", line 13, in get_portal1
    GET /portal1


Для Варианта №2 не сразу и понятно где искать

...
pydantic_core._pydantic_core.ValidationError: 1 validation error for MyModel
name
  Field required [type=missing, input_value={'name1': 'name', 'age': 10}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.13/v/missing
  • Вопрос задан
  • 181 просмотр
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Stepik
    Полный курс по FastAPI: от новичка до профессионала
    1 месяц
    Далее
  • Слёрм
    Python: Работа с API и фреймворками
    1 месяц
    Далее
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
response_model и return type частично пересекаются — в современных версиях FastAPI (0.89+) оба влияют на рантайм.

Return type annotation FastAPI использует для OpenAPI-схемы, IDE и (важно) для сериализации/фильтрации ответа. response_model имеет приоритет если оба указаны.

Вариант 1 нужен когда реально возвращаешь что-то другое: ORM-объект с лишними полями, голый dict. Вариант 2 подходит когда честно возвращаешь именно MyModel. Кста в доке FastAPI по SQL прямо написано: "используем response_model вместо return type потому что реально возвращаем не HeroPublic".

p.s. ИИ говорит "return type правильнее", для простых случаев да, но response_model для ORM/dict незаменим.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы