Какие вопросы задавать при выборе фреймворка для нового проекта
Что проверяют
Умеете ли вы выбирать инструмент от задачи, а не от моды и привычки. Следом обычно просят сравнить Django и FastAPI для конкретного проекта и объяснить, при каких условиях вы бы передумали.
Как отвечать
Покажите, что вопросы идут от продукта к технологии, а не наоборот:
- что строим: сервер с HTML, админкой и формами или API для SPA и мобильного клиента. Для первого Django даёт почти всё из коробки: ORM, миграции, аутентификацию, админку. Для второго FastAPI сразу строит OpenAPI-схему и валидирует данные через Pydantic;
- характер нагрузки: много ли ожидания ввода-вывода, WebSocket, долгих соединений. Тогда важна нормальная поддержка
asyncи ASGI. Если основная работа нагружает процессор, асинхронность не спасёт, нужны воркеры и очередь вроде Celery; - что нужно помимо роутинга: в FastAPI и Flask ORM, миграции, админку и авторизацию собираете сами, обычно из SQLAlchemy и Alembic. Это гибкость, но и время;
- команда: на чём уже умеют писать, насколько просто нанять людей под стек;
- жизненный цикл: как часто выходят релизы, есть ли версии с долгой поддержкой (LTS-версии Django получают исправления безопасности около трёх лет), сколько людей реально сопровождают проект, как быстро закрывают уязвимости;
- интеграции: есть ли зрелые библиотеки для нужной базы, брокера, платёжного сервиса, мониторинга;
- лицензия: у основных Python-фреймворков она разрешительная, но зависимости стоит проверить отдельно.
Отдельно скажите про производительность: в типичном веб-сервисе узкое место это база и внешние вызовы, а не фреймворк, поэтому бенчмарк «запросов в секунду на hello world» решающим аргументом не бывает.
Где спотыкаются
Выбирают по бенчмаркам и звёздам на GitHub, не спросив, что за проект.
Думают, что async сам по себе ускоряет приложение. Синхронный драйвер базы или тяжёлый расчёт внутри асинхронного обработчика блокирует весь цикл событий.
Не учитывают стоимость сборки «микрофреймворк плюс десяток библиотек». Через год эту самодельную платформу приходится сопровождать самим, а новичку разбираться в ней дольше, чем в стандартном Django.