FastAPI выкатил два релиза подряд, 0.137.0 и 0.138.0, и оба меняют привычные вещи. Само... — 24 июня 2026 г. в 10:05:12.708
FastAPI выкатил два релиза подряд, 0.137.0 и 0.138.0, и оба меняют привычные вещи. Самое заметное снаружи появилось в 0.138.0: метод app.frontend\(\). Теперь собранный фронтенд раздаётся прямо из FastAPI, без отдельного nginx или статик-сервера: app.frontend\("/", directory="dist"\) Кладёте билд SPA в dist, одна строка, и приложение само отдаёт его на корне. Есть и router.frontend\(\) для поддерева. Под капотом в 0.137.0 переписали то, как роутеры включаются друг в друга: 🔘раньше include\_router\(\) клонировал каждый путь в один плоский список, и в итоге на всё приложение оставался один роутер; 🔘теперь исходные объекты APIRouter и APIRoute сохраняются, а router.routes стал деревом промежуточных объектов; 🔘из-за этого маршруты можно добавлять в подроутер уже после include\_router\(\), изменения подхватятся, потому что роуты не копируются; 🔘в части случаев это ещё и экономит память. Здесь же спрятан ломающий момент: если ваш код ходил по router.routes как по плоскому списку APIRoute, он сломается, теперь это дерево. Для таких сценариев в 0.137.2 добавили iter\_route\_contexts\(\). @zen_of_python

