Выбор ответа Senior REST API и OpenAPI обновлено

Долгая операция в REST

Вопрос

Генерация отчёта занимает до 5 минут. Как правильно оформить API?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: 202 Accepted с id задачи, статус через GET или вебхук. Асинхронный паттерн: 202 с идентификатором операции, статус по отдельному ресурсу, уведомление по готовности.

Варианты ответа

  1. Держать HTTP-соединение до 5 минут и вернуть файл в ответе
  2. Вернуть 200 сразу, а файл отправить на почту без статуса
  3. Вернуть 504, чтобы клиент повторил запрос через пару минут
  4. 202 Accepted с id задачи, статус через GET или вебхукправильный ответ

Разбор

Асинхронный паттерн: 202 с идентификатором операции, статус по отдельному ресурсу, уведомление по готовности. Долгое соединение рвут прокси и балансировщики, а повторы запустят генерацию заново. 200 без статуса оставляет клиента в неведении. 504 означает ошибку шлюза, а не нормальный сценарий.

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

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