Как избежать истечения времени ожидания при создании ресурсов с помощью REST

У нас есть REST на основе сервера, и проблема в том, что для создания некоторых ресурсов требуется много времени - пару минут<10м.

Проблема в том, что к моменту создания ресурса я получаю сообщение об ошибке тайм-аута на клиенте, а не возвращаю ресурс.

Я думал о паре возможностей

  • Создайте ресурс с POST запросите и добавьте его в session/db, а затем отправьте запрос GET, чтобы вернуть ресурс. Мне не нравится это решение: это не "REST", и мне придется отправить пару запросов get, которые будут возвращать 404, пока ресурс не будет полностью создан

  • Установите для моего сервера (Tomcat 7 & Spring 3.2) более длительное время ожидания сеанса - я действительно не знаю, как это сделать.

  • Есть ли у сервера способ отправить ответ клиенту с надписью "Держать его", пока он не вернет окончательный ответ? - Не знаю, как это сделать

  • Есть ли способ отправить запрос, который просто "дольше" ждет ответа сервера? Не знаю, как это сделать

Какова лучшая практика вокруг этой проблемы?

Спасибо

1 ответ

Если вы знаете, что создание ресурса займет много времени, немедленно сообщите об этом клиенту. Не блокируйте его на минуты.

Распространенным способом является ответ с кодом состояния 202 (Accepted), Добавить Location заголовок с URI, который указывает на второй ресурс, который клиент может опросить, чтобы получить больше информации о текущем состоянии.

Этот второй ресурс должен ответить с 200 (OK) и текущий статус ("еще не завершен, повторите попытку через 30 секунд"). Если создание первого ресурса закончено, второй должен ответить с 303 (See Other) и URI первого ресурса в Location заголовок.

Другие вопросы по тегам