J'ai un ensemble de ressources dont les représentations sont créées de manière paresseuse. Le calcul pour construire ces représentations peut prendre de quelques millisecondes à quelques heures, en fonction de la charge du serveur, de la ressource spécifique et de 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, le moment où il devient disponible n'est pas important.
En raison de la mémoire limitée et du volume énorme de requêtes, ni NIO ni le long polling ne sont une option (c'est-à-dire je ne peux pas garder suffisamment de connexions ouvertes, ni même stocker toutes les requêtes en mémoire ; une fois que "quelques secondes" se sont écoulées, je persisterai les demandes en excès). De même, les limitations du client font qu'ils ne peuvent pas gérer un rappel de fin, à la place. Enfin, notez que je ne suis pas intéressé par la création d'une ressource "usine" à laquelle on envoie un POST, car les allers-retours supplémentaires signifient que nous ne respectons pas la contrainte en temps réel morcelée plus que désiré (de plus, c'est une complexité supplémentaire ; de plus, c'est une ressource qui bénéficierait de la mise en cache).
J'imagine qu'il y a une certaine controverse sur le fait de renvoyer un code d'état 202 "Accepté" en réponse à une demande GET, étant donné que je ne l'ai jamais vu en pratique, et son utilisation la plus intuitive est en réponse à des méthodes non sécurisées, mais je n'ai jamais trouvé quoi que ce soit décourageant spécifiquement. De plus, est-ce que je ne préserve pas à la fois la sûreté et l'idempotence?
Alors, que pensent les gens de cette approche?
MODIFIER : Je devrais mentionner que ceci est pour une prétendue API web d'entreprise - pas pour les navigateurs.