Ответ вслух Senior REST API и OpenAPI обновлено

Кейс: массовая загрузка товаров по API

Вопрос

Крупный продавец маркетплейса хочет загружать 200 000 товаров за раз через API. Сейчас есть только POST /products по одному товару. Как спроектируешь?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Синхронно 200 тысяч товаров по одному не загрузить: долго и упрёмся в лимиты. Делаю асинхронную операцию: POST /product-imports принимает файл или ссылку на него и сразу отвечает 202 Accepted с id задачи.

Что должно прозвучать в ответе

  • Асинхронная операция: POST /product-imports возвращает 202 и id задачи

  • Загрузка файла или пачками, ограничения размера

  • Статус задачи: GET /product-imports/{id} с прогрессом и ошибками по строкам

  • Идемпотентность по артикулу продавца (upsert), повторная загрузка безопасна

  • Лимиты, приоритизация, уведомление по завершении (вебхук)

Что могут спросить следом

  • Что вернуть, если 300 строк из 200 000 с ошибками?
  • Как не положить каталог для остальных продавцов?

Разбор

Синхронно 200 тысяч товаров по одному не загрузить: долго и упрёмся в лимиты. Делаю асинхронную операцию: POST /product-imports принимает файл или ссылку на него и сразу отвечает 202 Accepted с id задачи. GET /product-imports/{id} показывает статус, прогресс, число успешных и ошибочных строк, ошибки скачиваются отдельным отчётом с номерами строк и причинами. Идентификатор товара это артикул продавца, загрузка работает как upsert, поэтому повторная отправка того же файла безопасна. Частичный успех нормален: хорошие строки применяются, плохие в отчёте. Нагрузку контролирую очередью и лимитом параллельных импортов на продавца, а по завершении отправляю вебхук.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.