Ho un sistema legacy basato sui dati (ha un client Java Swing e un server applicazioni JavaEE) sul mio posto di lavoro, Questo sistema utilizza un singolo database per interrogare e modificare i dati.
Recentemente ci è stato chiesto di scrivere una nuova applicazione web che implementa alcune delle funzionalità già esistenti del sistema legacy.
L'applicazione dovrebbe funzionare sia online che offline - i tempi offline possono durare un'ora o giù di lì, ma potrebbero anche essere per alcuni minuti.
Questo è ciò che pensavamo di implementare per la funzionalità solo offline :
- Utilizzo di Service Worker per archiviare i file delle app statiche (in modo che potessimo accedervi quando non in linea).
- Recupero dei dati quando si passa alla modalità offline e li si archivia nel db locale
- Lettura dal db locale (IndexedDB).
- Le operazioni eseguite risiederanno nel database locale in un modulo di coda.
- Sincronizzazione delle operazioni eseguite dalla coda quando si ritorna online (come un unico lotto, alcune azioni possono dipendere da altre).
Per consentire all'applicazione di essere il più generica possibile e impedire di ripetere i controlli offline / online, abbiamo pensato a questa soluzione per aggiungere funzionalità online:
- Le richieste di recupero dei dati (a carico di pagine o componenti) andranno al server remoto e aggiorneranno il database locale , che verrà richiesto in seguito.
- Le operazioni eseguite verranno aggiunte alla coda delle operazioni (come quella offline).
- Polling della coda e richiamo del server remoto, aggiornamento del client in modo asincrono.
Supponiamo che solo un client possa aggiornare un certo insieme di dati, quindi qui non ci sono problemi di sincronizzazione sul lato server.
È un approccio gestibile e scalabile?
C'è anche un'altra considerazione qui - l'api REST che il server espone. Se utilizzo la stessa API per le operazioni di batch e le singole operazioni, dovrebbe essere un'API generale che accetta diversi tipi di azioni, il principio del comando.
Non ho sentito molto di questo tipo di servizio che mi porta a pensare che questo non sia un buon progetto REST, c'è un altro modo di implementarlo?