Сравнение применения Depends и обычного вызова функции в FastAPI
Depends включает функцию в граф зависимостей запроса. Прямой вызов в значении параметра выполняется при объявлении обработчика, а не отдельно для каждого запроса.
Читать ответПодготовка к интервью
135 вопросов по FastAPI с технических собеседований
Что проверяют на интервью
На странице собраны вопросы по FastAPI — от проверки базовых принципов до практического применения и архитектурных решений. В подборке чаще встречаются темы: backend, api, fastapi.
Каталог
Depends включает функцию в граф зависимостей запроса. Прямой вызов в значении параметра выполняется при объявлении обработчика, а не отдельно для каждого запроса.
Читать ответrequests.get блокирует event loop внутри async-ручки. Используйте async HTTP-клиент либо сделайте ручку синхронной; добавьте timeout, валидацию пагинации и контролируемые ошибки.
Читать ответСделайте GET /menu для списка команд и POST /menu для выбора. Команда завершения должна завершать пользовательский сценарий, а не останавливать сервер.
Читать ответПервая ошибка — get_db используется до определения. Затем нужно согласовать Pydantic-версию, ORM-схемы ответов, проверку владельца и обработку транзакционных ошибок.
Читать ответПеременная цикла user затеняет параметр функции. Строка '200' становится телом JSON-ответа, а не устанавливает HTTP-статус; статус задавайте отдельно.
Читать ответСоздайте пул PostgreSQL на время жизни приложения и выполняйте SQL в /menu через полученное из пула соединение. Не открывайте неограниченное число соединений и не блокируйте async-обработчик синхронным драйвером.
Читать ответСоздайте один общий asyncio.Lock для защищаемого состояния и поместите всю проверку и изменение внутрь async with lock. Новый Lock на каждый запрос не защитит ничего, потому что запросы не будут разделять блокировку.
Читать ответСначала проверю, не вызывается ли блокирующий HTTP-клиент внутри async def, а затем — ограничения пула соединений, timeouts и лимиты внешнего API. Две секунды I/O не должны последовательно блокировать весь event loop.
Читать ответawait может передать управление другой задаче между чтением и записью. Оба запроса прочитают прежний баланс, а затем один результат затрёт другой; атомарной должна быть вся проверка и изменение состояния.
Читать ответFastAPI принимает задания, Celery выполняет сверку, RabbitMQ доставляет задачи. Полный отказ от ручного аудита нельзя объявлять без подтверждённых требований и измерений качества конкретного проекта.
Читать ответСначала различаю задачу внутри процесса и надёжную внешнюю очередь. Для каждой нужны наблюдаемый результат, обработка исключения и стратегия shutdown; простое создание coroutine не означает успешное выполнение.
Читать ответНаиболее надёжен последний вариант с учётом области состояния: атомарная операция Redis для нескольких workers либо asyncio.Lock для одного event loop. Проверка и уменьшение должны составлять одну критическую операцию.
Читать ответ