Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

+1 183новые вакансии за сутки·93 833вакансии открыты сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 273
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: фильтры с числами, отклик по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 409 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 230
  • Облачные технологии14 171
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 801
  • Продакт-менеджер1 247

Разработка

  • Android1 858
  • iOS1 698
  • Fullstack вакансии996
  • AI вакансии955
  • Frontend вакансии755
  • Mobile вакансии44

По стеку

  • Go8 752
  • Java6 593
  • Node.js2 036
  • .NET1 739
  • Kotlin1 618
  • Rust1 472
  • C#717
  • PHP690
  • C++579

DevOps и инфраструктура

  • Kubernetes7 787
  • DevOps вакансии6 095
  • Linux-инфраструктура5 508
  • Terraform / IaC4 287
  • CI/CD3 272
  • Мониторинг и Observability1 792
  • SRE566
  • Кибербезопасность454

Аналитика и данные

  • Data Scientist1 138
  • Бизнес-аналитик921
  • Аналитик данных858
  • Системный аналитик154

Другие направления

  • Проджект-менеджер624
  • UI/UX дизайн149
  • Ручное тестирование14

По регионам

  • Вакансии в США44 166
  • Вакансии в Европе24 014
  • Вакансии в Канаде4 535
  • Работа в России3 867

По формату

  • Удалённые вакансии75 005
  • Релокация в США44 166
  • Гибридная работа12 485
  • Офисная работа7 090

По уровню

  • Senior вакансии42 643
  • Middle вакансии20 960
  • Junior вакансии6 708

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме FastAPIВсе вопросы
FastAPIJuniorКодинг

Что такое APIRouter и как он помогает организовывать маршруты?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

APIRouter — класс FastAPI для группировки маршрутов в отдельный модуль; подключается к приложению через app.include_router(), поддерживает prefix, tags и зависимости уровня роутера.

Базовый пример

# routers/items.py
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from app.db import get_session
from app.models import Item
from app.schemas import ItemCreate, ItemRead

router = APIRouter(prefix="/items", tags=["items"])

@router.get("/", response_model=list[ItemRead])
async def list_items(session: AsyncSession = Depends(get_session)):
    result = await session.execute(select(Item))
    return result.scalars().all()

@router.post("/", response_model=ItemRead, status_code=201)
async def create_item(
    body: ItemCreate,
    session: AsyncSession = Depends(get_session),
):
    item = Item(**body.model_dump())
    session.add(item)
    await session.commit()
    await session.refresh(item)
    return item
# main.py
from fastapi import FastAPI
from app.routers import items, users, orders

app = FastAPI()
app.include_router(items.router)
app.include_router(users.router, prefix="/users", tags=["users"])
app.include_router(orders.router)

Что такое APIRouter

APIRouter — это класс из пакета fastapi, который позволяет объявлять маршруты вне основного объекта FastAPI и затем подключать их через app.include_router(). Это основной инструмент разбиения монолитного файла на модули: каждый модуль (users, items, orders) создаёт свой роутер, а main.py только монтирует их.

Параметры include_router

При вызове app.include_router() можно переопределить или дополнить параметры роутера:

  • prefix — добавляет префикс URL ко всем маршрутам роутера.
  • tags — группирует эндпоинты в документации Swagger/ReDoc.
  • dependencies — список Depends(), применяемых ко всем маршрутам роутера (например, проверка JWT).
  • responses — общие ответы на уровне роутера (например, {401: {"description": "Unauthorized"}}).
  • default_response_class — переопределяет класс ответа (ORJSONResponse и т.п.).

Зависимости на уровне роутера

from fastapi import APIRouter, Depends
from app.auth import require_auth

router = APIRouter(
    prefix="/admin",
    tags=["admin"],
    dependencies=[Depends(require_auth)],  # применяется ко всем эндпоинтам
)

@router.delete("/users/{user_id}", status_code=204)
async def delete_user(user_id: int):
    ...

Вложенные роутеры

Роутеры можно вкладывать: parent_router.include_router(child_router). Это удобно для версионирования API: один роутер /api/v1 монтирует несколько доменных роутеров.

Подводные камни

  • Порядок маршрутов важен. FastAPI проверяет маршруты в порядке регистрации. Если /items/facets объявлен после /items/{item_id}, строка facets будет интерпретирована как UUID и вызовет ошибку валидации.
  • prefix дублируется. Если prefix указан и в конструкторе APIRouter(prefix="/items"), и в include_router(prefix="/items"), маршруты получат двойной префикс /items/items/....
  • dependencies на роутере не заменяют dependencies на эндпоинте — они объединяются. Это может привести к двойной проверке токена, если зависимость добавлена и там, и там.
  • response_model не наследуется с роутера на эндпоинт — его нужно указывать на каждом декораторе отдельно.
  • tags влияют только на документацию, а не на поведение роутинга или авторизацию.
  • Circular imports. При вложенных роутерах легко получить циклический импорт; решается выносом зависимостей в отдельный модуль deps.py.
  • Тестирование: при использовании TestClient из fastapi.testclient роутеры работают без дополнительных настроек, но зависимости нужно переопределять через app.dependency_overrides.

Типичные ошибки

  • Описывать apirouter только как термин и не показывать механизм на минимальном примере.
  • Игнорировать ошибки, пустые данные, конкурентный доступ или границы транзакции.
  • Не связывать поведение с официальным контрактом FastAPI и реальной эксплуатацией.

Что проверяет интервьюер

  • Объясняет apirouter через последовательность действий, а не через набор ключевых слов.
  • Приводит короткий кодовый пример или production-сценарий с ожидаемым поведением.
  • Называет хотя бы один риск: производительность, безопасность, транзакции, память или сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме FastAPI →

Источники

  • https://fastapi.tiangolo.com/tutorial/bigger-applications/
←Предыдущий вопросКак сравнить FastAPI с ближайшими backend-альтернативами по скорости разработки, производительности, экосистеме и эксплуатации?Следующий вопрос→Расскажите о случае, когда вы проектировали или улучшали сервис на FastAPI с учётом транзакций, безопасности, фоновых задач или мониторинга.

Связанные темы

FastAPIapi-designimplementationtechnical-reasoning

Вакансии с этим навыком

  • Middle Python Developer
  • Python Developer
  • Backend-разработчик (Middle / Middle+)
  • Python Developer
  • Staff Software Engineer

Частые вопросы на собеседовании

  • Как FastAPI использует Pydantic-модели для валидации запросов и ответов?
  • Как интегрировать SQLAlchemy с FastAPI для работы с базой данных?
  • Как реализовать аутентификацию через OAuth2 и JWT-токены в FastAPI?
  • Что такое ASGI и чем FastAPI/Uvicorn отличается от WSGI-серверов?