Ich habe eine Reihe von Ressourcen, deren Darstellungen träge erstellt werden. Die Berechnung zum Erstellen dieser Darstellungen kann je nach Serverlast, spezifischer Ressource und Mondphase zwischen einigen Millisekunden und einigen Stunden dauern.
Die erste für die Ressource empfangene GET-Anforderung startet die Berechnung auf dem Server. Wenn die Berechnung innerhalb weniger Sekunden abgeschlossen ist, wird die berechnete Darstellung zurückgegeben. Andernfalls wird der Statuscode 202 "Akzeptiert" zurückgegeben, und der Client muss die Ressource abfragen, bis die endgültige Darstellung verfügbar ist.
Der Grund für dieses Verhalten ist folgender: Wenn ein Ergebnis innerhalb weniger Sekunden verfügbar ist, muss es so schnell wie möglich abgerufen werden. Andernfalls ist es nicht wichtig, wann es verfügbar ist.
Aufgrund des begrenzten Speichers und des enormen Anforderungsvolumens sind weder NIO noch lange Abfragen eine Option ( dh ich kann nicht annähernd genug Verbindungen offen halten oder sogar alle Anforderungen in den Speicher einpassen; einmal "einige Sekunden" bestanden haben, ich bleibe bei den überschüssigen Anfragen). Ebenso sind die Client-Einschränkungen so, dass sie stattdessen keinen Abschlussrückruf verarbeiten können. Beachten Sie schließlich, dass ich nicht daran interessiert bin, eine "Factory" -Ressource zu erstellen, an die ein POST gesendet wird, da die zusätzlichen Roundtrips bedeuten, dass wir die stückweise Echtzeitbeschränkung mehr als gewünscht nicht erfüllen (außerdem ist es zusätzliche Komplexität; dies ist auch eine Ressource, die dies tun würde vom Caching profitieren).
Ich stelle mir vor, dass es einige Kontroversen über die Rückgabe eines 202 "Akzeptiert" -Statuscodes als Antwort auf eine GET-Anfrage gibt, da ich ihn in der Praxis noch nie gesehen habe und seine intuitivste Verwendung als Reaktion auf unsichere Methoden erfolgt, aber noch nie fand etwas speziell entmutigend. Bewahre ich nicht sowohl Sicherheit als auch Idempotenz?
Was denken die Leute über diesen Ansatz?
EDIT : Ich sollte erwähnen, dass dies für eine sogenannte Business Web API ist - nicht für Browser.
202
. Dass es in der Praxis selten verwendet wird, liegt meiner Meinung nach eher daran, dass sich nur wenige Webentwickler für die richtigen Statuscodes interessieren, da sie eher an die Interaktion zwischen Browser und Benutzeragenten gewöhnt sind. In diesem Fall202
gibt a ihnen keinen sichtbaren Hinweis (geben Sie ihnen ein200
und sie sind glücklich). ..).