Неправильно возвращать 202 “Принято ”В ответ на HTTP GET?

У меня есть набор ресурсов, представления которых создаются лениво. Вычисления для построения этих представлений могут занять от нескольких миллисекунд до нескольких часов, в зависимости от загрузки сервера, конкретного ресурса и фазы луны.

Первый запрос GET, полученный для ресурса, запускает вычисление на сервере. Если вычисление завершается в течение нескольких секунд, возвращается вычисленное представление. В противном случае возвращается код состояния 202 «Принято», и клиент должен опрашивать ресурс, пока не станет доступно окончательное представление.

Причина такого поведения следующая: если результат доступен в течение нескольких секунд, ему необходимо быть извлеченным как можно скорее; в противном случае, когда он станет доступным, не имеет значения.

Из-за ограниченного объема памяти и огромного количества запросов ни NIO, ни длительный опрос не подходят ( т.е. Я не могу поддерживать почти достаточное количество открытых соединений, я даже не могу вместить все запросы в память: по прошествии "нескольких секунд" я сохраняю лишние запросы). Точно так же ограничения клиента таковы, что вместо этого они не могут обрабатывать обратный вызов завершения. Наконец, обратите внимание, что я не заинтересован в создании «фабричного» ресурса, к которому отправляется один POST, поскольку дополнительные циклы передачи означают, что мы нарушаем кусочное ограничение реального времени больше, чем требуется (кроме того, это дополнительная сложность; кроме того, это ресурс, который

Я полагаю, что есть некоторые разногласия по поводу возврата кода состояния 202 «Принято» в ответ на запрос GET, поскольку я никогда не видел этого на практике, а его наиболее интуитивно понятное использование - это ответ на небезопасные методы, но я никогда не находил ничего, что могло бы отговорить это. Более того, разве я не сохраняю и безопасность, и идемпотентность?

Итак, что люди думают об этом подходе?

EDIT : Я должен упомянуть, что это для так называемого бизнес-веб-API, а не для браузеров.

78
задан user359996 4 November 2010 в 18:32
поделиться