Sincronizzazione della risorsa che è stata spostata dall'intervallo di filtro delle richieste

7

Ho un'API RESTful con i client corrispondenti.

Se una richiesta cliente recupera un set di risorse (Eventi) in base a un filtro, ad esempio eventi che si svolgono tra il 2015-04-13 e il 2015-04-19. Se un evento che è stato precedentemente sincronizzato con il client modifica l'ora sul server in modo che si trovi al di fuori dell'intervallo di tempo sopra indicato, la richiesta successiva non includerà l'evento aggiornato e il client non saprà della modifica finché non lo farà una richiesta che include il tempo aggiornato.

Le soluzioni a cui sto pensando sono

  1. Aggiunta di una gestione semplificata delle versioni creando un nuovo evento con il tempo aggiornato che fa riferimento all'evento originale ogni volta che un evento viene aggiornato. Quando viene effettuata una richiesta, il server deve restituire l'ultima versione di tutti gli eventi nell'intervallo di tempo.
  2. Aggiunta di una nuova risorsa (ad esempio EventUpdate) che tiene traccia solo delle variazioni temporali di un evento che lasciano una sorta di "lapide" dove un tempo si trovava l'evento. Ogni volta che viene effettuata una richiesta, EventUpdate deve essere controllato per vedere se ci fosse precedentemente un evento nell'intervallo di tempo richiesto, in tal caso, anche questi eventi dovrebbero essere inclusi nella risposta.

In questo momento mi sto orientando verso la soluzione 2. dal momento che sembra meno esagerato per ciò di cui ho bisogno in questo momento.

Esiste un modo standard per risolvere questo tipo di problema di sincronizzazione?

    
posta Erik Johansson 16.04.2015 - 09:30
fonte

1 risposta

1

Is there any standard way of solving this kind of synchronization problem?

Non credo, ma posso proporre una riprogettazione del sistema.

Crea due metodi API invece di uno:

  1. Metodo che restituisce gli ID evento per gli eventi attualmente pianificati per l'intervallo di date specificato
  2. Metodo che restituisce i dettagli dell'evento insieme al timestamp aggiornato_at per un dato ID evento

Se un cliente vuole controllare o ricontrollare l'intervallo di tempo specificato, usa il metodo # 1. Se vuole recuperare i dettagli dell'evento, usa il metodo # 2. # 2 restituirà un evento per id anche se ha spostato la sua data.

Per ridurre il traffico al metodo # 2, puoi utilizzare lo schema utilizzato dal protocollo HTTP (intestazione If-Modified-Since).

Per effettuare una sincronizzazione su un client, è possibile effettuare prima una chiamata API per ricontrollare l'intervallo specificato e quindi aggiornare tutti gli eventi (quelli che hanno id dalle chiamate precedenti e quelli che sono stati restituiti dal metodo n. 1 come nuovo).

Questo risolve il tuo caso?

    
risposta data 18.04.2015 - 14:41
fonte

Leggi altre domande sui tag