2012-03-16 79 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

相關問題