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?

questionAnswers(2)

yourAnswerToTheQuestion