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