Sincronização cliente-servidor em REST
Esta pergunta é sobre o que eu acho que é um problema muito comum no desenvolvimento do Android / iOS, mas ainda não encontrei nenhuma solução "padrão".
Digamos que temos uma API REST relativamente normal. O banco de dados do servidor contém (entre outros) as tabelascountries
etowns
com um relacionamento 1: N.
O cliente (aplicativo móvel) deseja manter um instantâneo local dessas duas tabelas. Assim, quando estiver off-line, ele poderá fazer consultas que normalmente seriam realizadas em REST, por exemplo: "obter uma lista de cidades austríacas com população> = 100"?
Como abordar isso?
Primeiro problema: consistência. O cliente deve ter um instantâneo das duas tabelas. Se o cliente baixar atualizações dotowns
tabela e fica off-line, algumas cidades podem fazer referência a um país que não esteja na cópia local docountries
mesa.
Segundo problema: o cliente deve fazer o download apenas das linhas novas / excluídas / alteradas. Deixe o REST e use alguma chamada RPC customizada comoget_updates_since(...)
?
Terceiro problema: como as alterações locais na cópia do banco de dados do cliente (possivelmente feitas offline) devem ser sincronizadas com o servidor? Chamadas personalizadas de RPC?