Зачем нужен APIRouter
APIRouter помогает не хранить все endpoints в одном файле main.py. Каждый router объединяет связанные маршруты: например, пользователей, заказы, каталог, аутентификацию или внутренние административные API.
Пример структуры
app/
main.py
api/
v1/
routers/
users.py
articles.py
auth.py
router.py
services/
schemas/
repositories/
core/
Роутер ресурса
from fastapi import APIRouter
router = APIRouter(
prefix='/articles',
tags=['Articles'],
)
@router.get('/')
def get_articles():
return []
@router.get('/{article_id}')
def get_article(article_id: int):
return {'id': article_id}
Подключение к приложению
from fastapi import FastAPI
from app.api.v1.routers import articles, users
app = FastAPI()
app.include_router(articles.router, prefix='/api/v1')
app.include_router(users.router, prefix='/api/v1')
Практические правила
группировать роутеры по бизнес-доменам, а не по HTTP-методам;
держать endpoints тонкими и передавать бизнес-логику в services;
задавать общие prefix и tags на router;
подключать общие dependencies, например авторизацию, на уровне router;
разделять версии API через отдельные пакеты или общий prefix /api/v1.
Как ответить на собеседовании
В большом FastAPI-проекте я разделяю endpoints на APIRouter по доменам и подключаю их в точке сборки приложения через include_router(). Prefix, tags и общие dependencies задаю на уровне router, а бизнес-логику не храню в самих endpoints.