J'ai un ensemble de ressources dont les représentations sont créées paresseusement. Le calcul pour construire ces représentations peut prendre de quelques millisecondes à quelques heures, selon la charge du serveur, la ressource spécifique et la phase de la lune.
La première requête GET reçue pour la ressource démarre le calcul sur le serveur. Si le calcul se termine en quelques secondes, la représentation calculée est renvoyée. Sinon, un code d'état 202 "Accepté" est renvoyé et le client doit interroger la ressource jusqu'à ce que la représentation finale soit disponible.
La raison de ce comportement est la suivante: si un résultat est disponible en quelques secondes, il doit être récupéré dès que possible; sinon, quand il devient disponible n'est pas important.
En raison de la mémoire limitée et du volume considérable de demandes, ni NIO ni longue interrogation ne sont une option ( c'est-à-dire que je ne peux pas garder presque assez de connexions ouvertes, ni même que je ne peux même pas mettre toutes les demandes en mémoire; une fois "quelques secondes" ont passé, je persiste les demandes en excès). De même, les limitations des clients sont telles qu'ils ne peuvent pas gérer un rappel d'achèvement à la place. Enfin, notez que je ne suis pas intéressé par la création d'une ressource "usine" à laquelle on POST, car les allers-retours supplémentaires signifient que nous échouons à la contrainte temps réel par morceaux plus que ce qui est souhaité (de plus, c'est une complexité supplémentaire; aussi, c'est une ressource qui bénéficier de la mise en cache).
J'imagine qu'il y a une controverse sur le renvoi d'un code de statut 202 "Accepté" en réponse à une requête GET, car je ne l'ai jamais vu dans la pratique, et son utilisation la plus intuitive est en réponse à des méthodes non sécurisées, mais je n'ai jamais trouvé quelque chose qui le décourageait spécifiquement. De plus, est-ce que je ne préserve pas à la fois la sécurité et l'idempotence?
Alors, que pensent les gens de cette approche?
EDIT : Je devrais mentionner que c'est pour une soi-disant API Web d'entreprise - pas pour les navigateurs.
202
. Le fait qu'il soit rarement utilisé dans la pratique est plus IMHO parce que peu de développeurs Web se soucient des codes de statut appropriés car ils sont plus habitués à l'interaction navigateur / utilisateur-agent, auquel cas a202
ne leur donne aucun indice visible (donnez-leur un200
et ils sont heureux. ..).