Короткий ответ
Каждая группа маршрутов оформляется как отдельный APIRouter, а затем подключается к основному приложению вызовом app.include_router(router, prefix=...).
Как это работает подробнее
APIRouter поддерживает те же декораторы (@router.get, @router.post и т. д.), что и основной объект FastAPI. После определения всех маршрутов в модуле, include_router копирует их в основное приложение с заданным префиксом пути и/или тегами для документации.
Пример кода
example.py
# users/router.py
from fastapi import APIRouter
router = APIRouter(prefix="/users", tags=["users"])
@router.get("/{user_id}")
def get_user(user_id: int):
return {"id": user_id}
# main.py
from fastapi import FastAPI
from users.router import router as users_router
app = FastAPI()
app.include_router(users_router)
# Теперь доступен GET /users/5Что использовать на практике
- Практика. Такой подход позволяет разбить крупное приложение на логические модули (
users.py,orders.py) по аналогии с Blueprint во Flask, упрощая навигацию и тестирование отдельных частей API.
Подводные камни
- Риск. Забывают указать префикс (
prefix='/users') и получают маршруты без ожидаемого пути; подключают один и тот же router несколько раз, из-за чего маршруты регистрируются повторно.