В чем отличие FastAPI 1 от FastAPI 2
Что проверяют
Часто это вопрос с подвохом: проверяют, будете ли вы выдумывать отличия или честно скажете, как на самом деле версионируется фреймворк. Следом разговор уходит в то, что реально меняется при обновлении FastAPI, прежде всего переход на Pydantic v2.
Как отвечать
Начните с поправки. FastAPI много лет выпускался в линейке 0.x, и релиза «FastAPI 2», к которому был бы большой переход с «первой версии», в привычном смысле нет. Ломающие изменения при этом приходят в минорных релизах, поэтому документация советует фиксировать версию с верхней границей по минорной, например fastapi>=0.115,<0.116.
Скорее всего, интервьюер имеет в виду переход на Pydantic v2, который FastAPI поддержал с версии 0.100.0. Вот что меняется в коде:
- ядро валидации:
pydantic-coreнаписан на Rust, валидация и сериализация заметно быстрее; - методы моделей:
.dict()стал.model_dump(),.json()стал.model_dump_json(),parse_objсталmodel_validate; - конфигурация: вложенный класс
Configзаменён наmodel_config = ConfigDict(...), аorm_modeнаfrom_attributes=True; - валидаторы:
@validatorи@root_validatorзаменены на@field_validatorи@model_validator; - настройки:
BaseSettingsвынесен в отдельный пакетpydantic-settings.
Упомяните и другие изменения самого FastAPI: зависимости через Annotated[Session, Depends(get_db)] как рекомендуемый стиль, lifespan вместо устаревшего @app.on_event("startup"), OpenAPI 3.1 в генерируемой схеме, команды fastapi dev и fastapi run.
Если на собеседовании настаивают на «двух версиях», спокойно уточните, какие именно релизы имеются в виду. Это нормальная инженерная реакция, а не незнание.
Где спотыкаются
Придумывают отличия вроде «вторая версия быстрее и лучше типизирована». Интервьюер просит пример из changelog, и ответ рассыпается.
Путают версию FastAPI с версией Pydantic. Ошибка на from pydantic import BaseSettings после обновления идёт от Pydantic v2, а не от FastAPI.
Обновляют FastAPI без фиксации версии и без тестов. Минорный релиз меняет поведение, и сервис падает на проде из-за незакреплённой зависимости в requirements.txt.