Il "problema", come è, è sul lato server: il client ha fatto una richiesta ben formata, ma il server non può soddisfarlo. Quindi sono incline a un "Errore del server", codice di stato 5xx. Disse the standard:
codici di stato di risposta che iniziano con la cifra "5" indicano i casi in cui il server è consapevole di aver commesso un errore o non è in grado di eseguire la richiesta ... il server dovrebbe includere un soggetto [che indica] se si tratta di una condizione temporanea o permanente.
Nota
- "ha commesso un errore o è incapace di eseguire la richiesta": nonostante il loro titolo di "Server Error", che non sono solo per errori del server.
- "temporanea o permanente": questi codici sono adatti per le risorse temporaneamente non disponibile, come la tua.
dei codici disponibili, direi 503, "Servizio non disponibile" era la soluzione migliore:
Il server è attualmente in grado di gestire la richiesta a causa di un sovraccarico temporaneo o di manutenzione del server. L'implicazione è che questa è una condizione temporanea che sarà alleviata dopo un certo ritardo. Se noto, la lunghezza del ritardo può essere indicata in un'intestazione Riprova dopo. Se non viene fornito alcun tentativo, il client DOVREBBE gestire la risposta come per una risposta 500.
Nota:
- "una condizione temporanea che verrà risolta con un certo ritardo": vero per il vostro caso.
- "sovraccarico temporaneo": non pedanticamente vero per il tuo caso. Ma, si potrebbe sostenere, erano il server molto più veloce, l'elaborazione in batch sarebbe già stato fatto quando il client ha effettuato la richiesta, quindi è una sorta di "sovraccarico": il cliente sta chiedendo le risorse più velocemente di quanto il server può renderli disponibili.
- "il cliente deve gestire la risposta, come si farebbe per una risposta 500.": che è" Errore interno del server ", il tipo di risposta in caso di errore del server a causa di un bug. Lo standard sembra implicare che un client ben educato dovrebbe provare non in questo caso. così la vostra risposta dovrebbe includere un valore
Retry-After
. Si potrebbe fornire come valore il tempo di completamento stimato della successiva esecuzione del processo batch, o l'intervallo di esecuzione del processo batch.
Definizione del codice di stato proprio 5xx (591, ad esempio), anche se permitted, avrebbe la semantica sbagliata:
HTTP status co des sono estensibili ... Le domande devono comprendere la classe di qualsiasi codice di stato, come indicato dalla prima cifra, e trattare qualsiasi risposta non riconosciuta come equivalente al codice di stato x00 di quella classe
cliente avrebbe trattare il proprio codice di stato come 500, "Errore interno del server", che (come discusso sopra) non sarebbe corretto.
[in qualche modo correlato] (http://stackoverflow.com/questions/7730199/best-practice-for-implementing-long-running-searches-with-rest/7730452#7730452) –
In primo luogo, se thingy 1234 non ha ancora alcuna rappresentazione GET-in che senso esiste come risorsa (dal punto di vista del cliente)? Il fatto che, interno al server, ci sia un lavoro in coda per creare 1234, non sembra implicare che la risorsa 1234 esista. Secondo, dove il client ha ottenuto l'URI .../thingyblob/1234? Probabilmente il server non avrebbe dovuto fornire quell'URI al client finché la risorsa non fosse effettivamente GET-capable. –
Una cosa ha altre proprietà che vale la pena di ottenere oltre al blob. È solo il blob che richiede tempo per generare. Il client ottiene, ad esempio, http: // server/thingyapi/thingy/1234 – JCCyC