Caso d'uso appropriato per "accettato"?

2

Abbiamo un'attività accodata da un endpoint REST che creerà una risorsa e accoderà immediatamente un'attività o un ritardo in base a una determinata logica aziendale.

Stavo pensando di usare HTTP/1.1 200 OK per il caso immediato e HTTP/1.1 202 Accepted per il caso in cui tale attività è stata ritardata, tuttavia, la risorsa POSTed viene creata immediatamente, è solo l'attività risultante che colpisce l'utente che è in ritardo, quindi sembra un po 'di abuso fare un 202 . Sto pensando troppo a questo? C'è un modo migliore che posso dire al cliente di questo compito in ritardo?

    
posta jtmarmon 10.06.2015 - 21:23
fonte

3 risposte

7

202 accettati

The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place.

Mi sembra una buona idea. Che la risorsa venga creata immediatamente, in realtà non completa l'elaborazione nel tuo caso.

    
risposta data 10.06.2015 - 22:16
fonte
4

Ci sono due risposte simili che dovrebbero essere considerate a seconda di quale dovrebbe essere la risposta attesa.

La 202 risposta accettata è una risposta "sì, ottenuto". La risorsa viene creata e il server cercherà di fare qualcosa con questo.

The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this.

The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for some other process (perhaps a batch-oriented process that is only run once per day) without requiring that the user agent's connection to the server persist until the process is completed. The entity returned with this response SHOULD include an indication of the request's current status and either a pointer to a status monitor or some estimate of when the user can expect the request to be fulfilled.

( link )

L'altra risposta da guardare è la 201 risposta creata:

The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the resource given by a Location header field. The response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. The origin server MUST create the resource before returning the 201 status code. If the action cannot be carried out immediately, the server SHOULD respond with 202 (Accepted) response instead.

( link )

In particolare, la risposta 201 risponde con la posizione della risorsa che è stata creata. Questa parte corrisponde alla descrizione del tuo requisito:

... the resource POSTed is created immediately, it's just the resulting task that affects the user which is delayed ...

Post di blog correlati:

risposta data 10.06.2015 - 22:39
fonte
0

Esiste la domanda se 202 sia il risultato giusto per quello che stai facendo, e l'altra domanda è come il cliente la elabora.

Se un cliente riceve 202, è probabile che non lo gestisca correttamente (molti client riconoscono solo 200 come successo, tutto il resto è negativo).

Ma cosa succede se il client lo riconosce: 202 significa che il server ha promesso di farlo, ma l'operazione potrebbe effettivamente fallire. Ciò significa che il cliente non può fare affidamento sul server che ha memorizzato i dati. Il cliente deve fare qualche altra richiesta in un secondo momento per verificare se la richiesta è stata effettivamente eseguita. È un dolore.

Quindi, a meno che tu non abbia una lunga coda di operazioni che devi fare, dove sospetti che un client possa timeout (60 secondi in genere), penserei molto se non è meglio restituire 200 quando la richiesta ha effettivamente stato elaborato.

    
risposta data 11.06.2015 - 03:08
fonte

Leggi altre domande sui tag