У меня есть набор ресурсов, представления которых создаются лениво. Вычисление для построения этих представлений может занимать от нескольких миллисекунд до нескольких часов, в зависимости от нагрузки на сервер, конкретного ресурса и фазы луны.
Первый запрос GET, полученный для ресурса, запускает вычисление на сервере. Если вычисление завершается в течение нескольких секунд, вычисленное представление возвращается. В противном случае возвращается код статуса 202 "Принятый", и клиент должен опросить ресурс до тех пор, пока не будет доступно окончательное представление.
Причиной такого поведения является следующее: если результат доступен в течение нескольких секунд, его необходимо как можно скорее получить; в противном случае, когда он становится доступным, это не важно.
Из-за ограниченной памяти и огромного объема запросов ни NIO, ни длительный опрос - это опция (т.е. я не могу открыть почти достаточно соединений, даже даже не могу удовлетворить все запросы в памяти; несколько секунд ", я сохраняю избыточные запросы). Кроме того, клиентские ограничения таковы, что они не могут обрабатывать обратный вызов завершения. Наконец, обратите внимание, что мне не интересно создавать ресурс" factory", который имеет один POST, поскольку дополнительные круговые вызовы означают, что мы отказываемся от кусочного ограничения в реальном времени более чем желательно (более того, это лишняя сложность, также это ресурс которые выиграют от кэширования).
Я предполагаю, что существует некоторая разногласия по поводу возврата кода статуса "Принятый" 202 в ответ на запрос GET, поскольку я никогда не видел его на практике, и его наиболее интуитивное использование в ответ на небезопасные методы, но я "Я никогда не находил ничего, что специально обескураживало его. Кроме того, я не сохраняю как безопасность, так и идемпотентность?
Итак, что люди думают об этом подходе?
EDIT. Я должен упомянуть об этом для так называемого бизнес-веб-API - не для браузеров.