Я пытаюсь спроектировать, как лучше всего обрабатывать синхронизацию данных между приложением Android и удаленным сервером через API REST.
Сейчас это все еще ранняя стадия, но мой сервер отдыха в основном работает (в любом случае, достаточно для тестирования).
У меня есть 3 таблицы для синхронизации (связаны, как показано ниже).
ПОКАЗАТЬ> ----- СЕЗОН> ----- ЭПИЗОД
И сервер, и устройство имеют одинаковую версию этих таблиц, и мне нужно синхронизировать их ОТ устройства к СЕРВЕРУ (на данный момент и в конечном итоге 2 способа). Синхронизация будет осуществляться через службу Android, выполняющую асинхронные вызовы API REST (вставка / обновление и удаление) в фоновом режиме.
Теперь моя главная проблема заключается в логике, которая обеспечит обновление обеих сторон соответственно.
вставка / обновление с устройства на сервер будет выполняться с помощью запроса POST, поэтому я подумал о наличии флага состояния для всех трех таблиц, который заполняется с помощью ON INSERT / ON UPDATE TRIGGERS (SQlite), позволяющего службе синхронизации обрабатывать строки что нужно на сервер зайти. Это правильный подход?
Это будет выглядеть примерно так:
CREATE TRIGGER sync_update_show AFTER UPDATE ON show
BEGIN
UPDATE show SET sync_flag = 'TO_SYNC' WHERE _id = new._id
END
Теперь для удаления, поскольку служба независима от основного приложения, я использовал BEFORE DELETE SQlite TRIGGERS для заполнения таблицы «TODELETE», которую служба может просматривать и инициировать вызовы api delete на сервер. Это правильный подход?
Это будет выглядеть примерно так:
CREATE TRIGGER sync_delete_show BEFORE DELETE ON show
BEGIN
INSERT INTO todelete_show
SELECT * FROM show WHERE _id = old._id
END
Теперь, когда речь заходит о синхронизации приложений на сервере, я просто получаю все записи (вызов APi) и обрабатываю вставку / обновление / удаление на устройстве (просматривая возвращенные записи). Но может быть более эффективный подход, оптимизирующий пропускную способность (возвращаемый JSON может быть большим).
Я приветствую любые комментарии по этому поводу, поскольку я не хочу начинать работу над реализацией Сервиса и понимаю, что все неправильно поняла!