Как избежать истечения времени ожидания при создании ресурсов с помощью 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
заголовок.