Ошибки FastAPI: валидация, зависимости, база и тесты
Маршрут работает в Swagger, но приложение возвращает 500 при дубликате, принимает лишний фильтр или проходит тест без настоящей проверки прав. Начинайте с места, где запрос отклонился от ожидаемого поведения: вход, зависимость, база или ответ. Ниже — разборы с небольшими примерами и переходы к открытым урокам. Можно выбрать отдельную проблему или пройти весь путь запроса.
Запрос не дошёл до нужного обработчика
Запишите метод, путь и фактический статус ответа. Ответ 404, редирект и ошибка 422 требуют разных проверок. Если сервер ещё не запускается, сначала соберите минимальное приложение и убедитесь, что обращаетесь к зарегистрированному маршруту.
- FastAPI и завершающий слеш: почему тест не замечает редирект
- FastAPI молча игнорирует фильтр: проверяем всю строку query
- Ошибка 422 вернула секрет: сокращаем ответ валидации FastAPI
Запустить первый GET через Uvicorn и проверить /docs.
Клиент вошёл, но получил лишние данные
Разделите извлечение данных для входа, определение пользователя и проверку доступа к конкретной записи. Скрытый маршрут или отдельная модель ответа решают только часть задачи. Для проверки полезны два пользователя и попытка прочитать чужой ресурс.
- FastAPI: API-ключ в заголовке или cookie без случайного отказа
- Маршрут FastAPI исчез из Swagger, но остался доступен
- FastAPI вернул внутреннее поле: ограничиваем ответ отдельной моделью
Разобрать текущего пользователя как dependency.
Запись в базе и ответ API разошлись
Проверяйте не только JSON: после неудачного запроса прочитайте состояние базы. При дубликате, частичной записи и повторном запросе важны границы транзакции и явный формат ошибки.
- FastAPI возвращает 500 при дубликате: unique-ограничение и ответ 409
- Транзакция в FastAPI: как сохранить две записи целиком или откатить обе
- SQLite в тестах FastAPI: почему появляется no such table
Задачи на транзакции SQLAlchemy и ошибки API.
Тест зелёный, а ошибка осталась
Выполните запрос через клиент, проверьте тело ответа и значимое состояние после отказа. Отдельно убедитесь, что тест не подменяет именно тот участок, который вы хотели проверить.
- Тесты FastAPI: как проверить контракт, а не только статус 200
- dependency_overrides в FastAPI: как подменить зависимость и убрать подмену
- В тестах FastAPI нет ресурса из lifespan: запускаем TestClient через with
Первый тест API через TestClient.
Продолжить обучение
Чтобы связать эти проверки в одном приложении, откройте бесплатный курс FastAPI с базой данных и тестами. В программе есть маршруты, модели Pydantic, SQLAlchemy, зависимости и авторизация. Для начала выберите урок по своей проблеме; затем продолжайте собирать API последовательно.
Продолжить на практике
- FastAPI для начинающих: API с базой данных и тестами ↗
Соберёте свой первый полноценный backend на FastAPI: с базой данных, регистрацией, JWT-авторизацией и автотестами. 34 коротких урока и 140 заданий с проверкой — бесплатно.
