Sto provando a risolvere due situazioni qui correlate a fare richieste POST e gestire le risposte.
- Esecuzione di una richiesta e interruzione della richiesta a causa della mancata risposta del server, oltre a presupporre che in questo caso non sia stato scritto nulla in un database ospitato sul server.
- Esecuzione di una richiesta e la richiesta è scaduta, ma ora le cose sono scritte su un server e il server potrebbe / eventualmente invierà una risposta. Quindi sto cercando di capire cosa dovrei fare in ciascuna di queste due situazioni. Situazione n. 2 è la cosa più importante per me, e non ho davvero un'idea su come risolverlo.
Ho solo una soluzione per la prima situazione, ma sarei interessato a conoscere le opinioni / le migliori pratiche su come risolvere anche questo.
Sto usando Swift 2.0 se questo è importante, quindi è iOS, e sto usando wrapper personalizzato attorno a NSURLSession e classi correlate per fare richieste.
Come informazioni aggiuntive posso descrivere come funziona la mia app:
Creo un oggetto modello, chiamandolo Dati. Così mando una rappresentazione JSON dell'oggetto su un server, la scrivo nel database e ricevo una risposta da un server che è stata registrata.
Questa è un'attività assegnata alla mia classe DataManager (che è un singleton) e gestisce richieste e risposte. Quando riceve una risposta da un server, aggiorna un oggetto modello appropriato e tramite l'interfaccia utente di aggiornamento di delega / notifica.
Quando un utente tocca il pulsante di invio, mostro l'indicatore di attività e imposto il testo di un'etichetta appropriata all'invio ... Ed è qui che possono sorgere queste due situazioni ...
Nella situazione n. 1, dirò all'utente che la richiesta è scaduta, annulla la richiesta e mostra un pulsante Riprova. Problema risolto.
Situazione n. 2 è più complicato ... L'utente tocerà il pulsante di invio e attenderà. Ma immagina se questo accada:
- i dati inviati a un server sono scritti con successo
- ma la risposta del server è stata molto lenta e supera il limite di timeout su un'app client
- Visualizzo il messaggio di richiesta non riuscita a un utente, ma la richiesta non ha avuto esito negativo Quindi, ciò che può accadere qui, è che l'utente sperimenterà incoerenza tra ciò che vede su un dispositivo e ciò che è realmente sul server (almeno per un breve periodo di tempo).
Quindi, quando si verifica l'aggiornamento successivo, l'utente vedrà l'oggetto inviato in precedenza, anche se ha ricevuto il messaggio che dice "operazione fallita"
Come gestisci questo?