Tenho um conjunto de recursos cujas representações são criadas preguiçosamente. O cálculo para construir essas representações pode levar de alguns milissegundos a algumas horas, dependendo da carga do servidor, do recurso específico e da fase da lua.
A primeira solicitação GET recebida para o recurso inicia a computação no servidor. Se o cálculo for concluído em alguns segundos, a representação computada será retornada. Caso contrário, um código de status 202 "Aceito" é retornado e o cliente deve pesquisar o recurso até que a representação final esteja disponível.
O motivo para esse comportamento é o seguinte: Se um resultado estiver disponível em alguns segundos, ele precisa ser recuperado o mais rápido possível; caso contrário, quando estiver disponível, não é importante.
Devido à memória limitada e ao grande volume de solicitações, nem NIO nem long polling são uma opção ( ou seja, não consigo manter conexões abertas o suficiente, nem mesmo caber todas as solicitações na memória; uma vez "alguns segundos" passaram, eu persisto os pedidos em excesso). Da mesma forma, as limitações do cliente são tais que eles não podem lidar com um retorno de chamada de conclusão. Por fim, observe que não estou interessado em criar um recurso de "fábrica" para o qual seja feito um POST, pois as viagens extras significam que falhamos na restrição de tempo real por partes mais do que o desejado (além disso, é uma complexidade extra; também, este é um recurso que beneficiar do armazenamento em cache).
Imagino que haja alguma controvérsia sobre o retorno de um código de status 202 "Aceito" em resposta a uma solicitação GET, visto que nunca vi isso na prática e seu uso mais intuitivo é em resposta a métodos inseguros, mas nunca encontrou algo especificamente desencorajador. Além disso, não estou preservando a segurança e a idempotência?
Então, o que as pessoas pensam sobre essa abordagem?
EDIT : Devo mencionar que isso é para uma chamada API da web de negócios - não para navegadores.
202
. O fato de raramente ser usado na prática é mais IMHO porque poucos desenvolvedores da web se preocupam com os códigos de status adequados, já que estão mais acostumados com a interação navegador / usuário-agente, caso em que a não202
dá a eles nenhuma pista visível (dê a eles um200
e eles ficarão felizes. ..).