Gestione dei timeout delle risposte del server [duplicato]

0

Considera il seguente scenario:

  1. L'utente invia una richiesta per trasferire denaro.
  2. Il server riceve la richiesta e trasferisce i soldi, ma la risposta scade.
  3. L'app segnala un errore.
  4. Quindi l'utente prova a trasferire di nuovo i soldi.

Come evitiamo questo tipo di scenario?

    
posta Samhan Salahuddin 07.10.2013 - 09:01
fonte

1 risposta

1

Ci sono due modi:

  1. Rendi l'operazione idempotent , ovvero eseguirla due volte non ha effetti diversi dal farlo una sola volta.
  2. Permetti di scoprire lo stato di una richiesta ex post. Cioè, hai una query aggiuntiva per il risultato della passata richiesta dato il suo ID.

Per i protocolli tra le applicazioni il primo è preferito, ma dovrai farlo più tardi quando l'utente viene coinvolto.

Fondamentalmente quando non si ottiene la risposta, si riprova la richiesta con lo stesso ID e la stessa password monouso (o qualsiasi altro token di autenticazione diverso per ogni richiesta per impedire l'attacco di riproduzione) e assicurarsi che il server esegua nulla e ripete l'ultima risposta se ha già visto la richiesta. Questo gestirà il caso in cui la rete semplicemente lascia cadere la risposta.

Tuttavia, quando la rete ha interruzioni più lunghe solo nel momento inopportuno, l'utente alla fine rinuncerà e chiuderà l'app. Di quando lo riavviano in seguito, è necessario un modo per mostrare loro quali transazioni sono state ricevute sul server in modo che sappiano se è necessario immettere nuovamente la transazione o meno. Poiché hai perso lo stato chiudendo l'app, l'unica tua possibilità è quella di elencare la transazione e assicurarti che l'utente la veda.

    
risposta data 07.10.2013 - 11:04
fonte

Leggi altre domande sui tag