Tengo un conjunto de recursos cuyas representaciones se crean con pereza. El cálculo para construir estas representaciones puede llevar desde unos pocos milisegundos hasta unas pocas horas, según la carga del servidor, el recurso específico y la fase de la luna.
La primera solicitud GET recibida para el recurso inicia el cálculo en el servidor. Si el cálculo se completa en unos segundos, se devuelve la representación calculada. De lo contrario, se devuelve un código de estado 202 "Aceptado" y el cliente debe sondear el recurso hasta que esté disponible la representación final.
El motivo de este comportamiento es el siguiente: si un resultado está disponible en unos pocos segundos, debe recuperarse lo antes posible; de lo contrario, cuando esté disponible no es importante.
Debido a la memoria limitada y al gran volumen de solicitudes, ni NIO ni el sondeo largo es una opción ( es decir, no puedo mantener abiertas suficientes conexiones, ni siquiera puedo ajustar todas las solicitudes en la memoria; una vez, "unos segundos" han pasado, persisto las solicitudes en exceso). Asimismo, las limitaciones del cliente son tales que no pueden manejar una devolución de llamada de finalización. Finalmente, tenga en cuenta que no estoy interesado en crear un recurso de "fábrica" al que se envía un POST, ya que los viajes de ida y vuelta adicionales significan que fallamos en la restricción en tiempo real por partes más de lo deseado (además, es una complejidad adicional; también, este es un recurso que beneficiarse del almacenamiento en caché).
Me imagino que existe cierta controversia sobre la devolución de un código de estado 202 "Aceptado" en respuesta a una solicitud GET, ya que nunca lo he visto en la práctica, y su uso más intuitivo es en respuesta a métodos inseguros, pero nunca encontré algo específicamente desalentador. Además, ¿no estoy preservando tanto la seguridad como la idempotencia?
Entonces, ¿qué piensa la gente sobre este enfoque?
EDITAR : Debo mencionar que esto es para la llamada API web empresarial, no para navegadores.
202
. Que rara vez se usa en la práctica es en mi humilde opinión más porque pocos desarrolladores web se preocupan por los códigos de estado adecuados, ya que están más acostumbrados a la interacción navegador / usuario-agente, en cuyo caso202
a no les da una pista visible (dales un200
y estarán felices. ..).