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