Вступить в клуб →
сложнаявопросREST API и валидация данных

Построение выгрузки за три минуты внутри POST-запроса: почему клиент получает 504 и дубли

Ручка POST /reports синхронно строит большую выгрузку: собирает данные, формирует файл, кладёт его в хранилище. На боевых объёмах это занимает 2–3 минуты.

Что происходит на практике: шлюз рвёт соединение по таймауту, клиент видит 504 и нажимает кнопку ещё раз, а в хранилище оказываются две одинаковые выгрузки, потому что первая всё же досчиталась.

Какое решение правильное?

  • Поднять таймауты шлюза и клиента до пяти минут — этого достаточно при текущих объёмах
  • Отдавать ответ по частям потоком, чтобы соединение не простаивало и не рвалось по таймауту
  • Перевести обработчик в async def — тогда запрос перестанет висеть и таймаута не будет
  • Принять задачу, вернуть 202 с идентификатором, считать в фоне, статус отдавать отдельной ручкой

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела