Ho una serie di risorse le cui rappresentazioni vengono create pigramente. Il calcolo per costruire queste rappresentazioni può richiedere da pochi millisecondi a poche ore, a seconda del carico del server, della risorsa specifica e della fase lunare.
La prima richiesta GET ricevuta per la risorsa avvia il calcolo sul server. Se il calcolo viene completato entro pochi secondi, viene restituita la rappresentazione calcolata. In caso contrario, viene restituito un codice di stato 202 "Accettato" e il client deve eseguire il polling della risorsa finché non è disponibile la rappresentazione finale.
La ragione di questo comportamento è la seguente: se un risultato è disponibile entro pochi secondi, deve essere recuperato il prima possibile; altrimenti, quando diventa disponibile non è importante.
A causa della memoria limitata e dell'enorme volume di richieste, né NIO né il polling lungo sono un'opzione ( cioè non riesco a mantenere aperte quasi abbastanza connessioni, né posso nemmeno adattare tutte le richieste in memoria; una volta "pochi secondi" sono passate, persisto le richieste in eccesso). Allo stesso modo, le limitazioni del client sono tali che non possono invece gestire un callback di completamento. Infine, tieni presente che non sono interessato a creare una risorsa "di fabbrica" a cui eseguire il POST, poiché i viaggi di andata e ritorno extra significano che falliamo il vincolo in tempo reale a tratti più di quanto si desideri (inoltre, è una complessità extra; inoltre, questa è una risorsa che potrebbe trarre vantaggio dalla memorizzazione nella cache).
Immagino che ci sia qualche controversia sulla restituzione di un codice di stato 202 "Accettato" in risposta a una richiesta GET, visto che non l'ho mai visto in pratica e il suo utilizzo più intuitivo è in risposta a metodi non sicuri, ma non l'ho mai visto trovato qualcosa di specificamente scoraggiante. Inoltre, non sto preservando sia la sicurezza che l'idempotenza?
Allora, cosa ne pensa la gente di questo approccio?
EDIT : dovrei menzionare che questo è per una cosiddetta API web aziendale, non per i browser.
202
. Il fatto che sia usato raramente nella pratica è IMHO di più perché pochi sviluppatori web si preoccupano dei codici di stato corretti in quanto sono più abituati all'interazione browser / user-agent, nel qual caso a non202
fornisce loro indizi visibili (dai loro un200
e sono felici. ..).