2012-03-16 111 views
2

我想要设计如何通过REST API来处理Android应用程序和远程服务器之间的数据同步。通过REST API处理Android服务和服务器之间的数据同步

现在它还处于早期阶段,但我有我的休息服务器基本上运行(无论如何足够用于测试目的)。

我有3个表来同步(链接如下)。

SHOW> -----季> ----- EPISODE

服务器和设备有这些表的一个类似的版本,我需要现在,最终他们设备同步到服务器(2方法)。同步将通过Android服务在后台对REST API进行异步调用(插入/更新和删除)而发生。

现在我的主要问题是提出一个逻辑,以确保双方将得到相应的更新。

从设备到服务器的插入/更新将通过POST请求完成,所以我想所有3个表上都有一个状态标志,通过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的触发器来填充“TODELETE”表,该服务可以浏览和触发删除对服务器的API调用。 这是正确的做法吗?

它看起来像

CREATE TRIGGER sync_delete_show BEFORE DELETE ON show 
BEGIN 
    INSERT INTO todelete_show 
    SELECT * FROM show WHERE _id = old._id 
END 

现在,当它涉及到服务器应用程序同步,我只想得到所有记录(API调用)和处理插入/更新/删除设备上(浏览通过返回的记录)。但是可能有更高效的方法来优化带宽(返回的JSON可能很大)。

我欢迎任何意见,因为我不想开始处理服务实现并意识到我弄错了所有错误!

回答

0

我认为你使用触发器的方法可以确定地工作,我建议你使用一个“SYNC”表来记录你需要做的所有网络操作,这样即使你处于脱机状态,所有的网络操作也会被安排到在可能的情况下执行,并且执行任务后,将其从“SYNC”表中删除。

我强烈建议您实施一个ContentProvider来存储表格,因为您可以更轻松地在您的活动/片段中使用很多Android API,特别是CursorLoaders和CursorAdapters。

看看contentProviders:http://developer.android.com/guide/topics/providers/content-provider-creating.html

而且也看看SyncAdapter: http://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html

还检查了该说说在Android bulding的宁静的应用程序,是有点老,但我认为这是仍然非常有效 http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html

+0

谢谢你的信息。我不认为我现在需要ContentProvider,因为我不打算与其他应用程序共享内容而不是我的其余服务器。我一定会考虑它的未来! – Madoc 2012-03-19 09:08:14

1

您使用数据库触发器管理更改日志的方法一定可行。如果您想要更多面向对象的方法,您可以为您的业务对象公开一个CRUD API,然后在API中使用update/insert/delete标记更新更新日志表,而不使用数据库触发器。

如果您有兴趣使用同步框架,我想请您注意OpenMobster的同步服务。

你可以做以下的同步操作

  • 双向
  • 单向客户
  • 单向设备
  • 启动时

除此之外,所有的修改都自动跟踪并与云同步。网络连接断开时,您可以让应用程序脱机。它将跟踪所有更改,并在连接返回时自动在后台将其与云同步。

它还支持像iCloud这样的多设备同步。

在云上,您只需编写一个Java通道,它是数据的CRUD接口并将通道展示给Sync Engine。在设备端,此数据可通过基于CRUD的Sync API获取。所有其他同步详细信息(如管理更改日志,冲突管理,复制到多个设备等)都由Sync Engine自动处理。

对你而言,

ChangeLog自动管理并与Sync Engine集成。它使用我提到的面向对象的方法,并通过基于CRUD的Sync API处理同步。

这里是一个开源项目链接:http://openmobster.googlecode.com

这里是一个教程,了解一些它的运作方式:http://code.google.com/p/openmobster/wiki/AndroidSyncApp

相关问题