我有一個REST服務器和在移動設備上運行的客戶端應用程序。客戶端有一些數據,並希望從服務器獲取數據更新。我如何以一種RESTful方式執行此操作在單個交易中?REST最佳實踐:將客戶端同步到服務器
假設客戶有以下三個項目:
widget id=1 timestamp=2010-03-05T08:00:00
doodad id=1 widget=1 timestamp=2010-03-05T08:10
doodad id=2 widget=1 timestamp=2010-03-05T08:20
widget id=2 timestamp=2010-03-05T09:00:00
doodad id=3 widget=2 timestamp=2010-03-05T08:10
,並且服務器有
widget id=1 timestamp=2010-03-05T08:00:00
doodad id=1 widget=1 timestamp=2010-03-05T08:10
doodad id=2 widget=1 timestamp=2010-03-05T09:00
doodad id=4 widget=1 timestamp=2010-03-05T08:30
widget id=2 timestamp=2010-03-05T10:00:00
doodad id=3 widget=2 timestamp=2010-03-05T09:10
doodad id=5 widget=2 timestamp=2010-03-05T08:30
服務器應該返回類似
doodad id=2 widget=1 timestamp=2010-03-05T09:00
doodad id=4 widget=1 timestamp=2010-03-05T08:30
widget id=2 timestamp=2010-03-05T10:00:00
doodad id=3 widget=2 timestamp=2010-03-05T09:10
doodad id=5 widget=2 timestamp=2010-03-05T08:30
只包含更改的行。
客戶端想告訴服務器它有什麼,以便服務器可以發送更新。我不想多次連接到服務器,因爲移動連接不可靠,我不想冒險獲取部分數據。
如果我打算做多個連接,我可能會讓客戶端爲每個項目生成GET請求,它使用ID和時間戳,服務器可以沒有任何應答(304未修改)或更新後的值作爲適當。例如:「GET/widgets/{id}; timestamp = xxx」。
在一次交易中做同樣的事情的最佳方式是什麼?我可以做一些類似於「GET/changes」的事情嗎?身體的客戶端已經有了每行的類型(widget或doodad),id和timestamp值?我想我知道如何返回值(作爲一系列變化),但客戶如何要求他們?
謝謝,關於如何使用etags拉爾夫
它實際上是304未修改即返回如果 - 無 - 匹配:頭 – 2010-03-05 14:47:19
對不起。在看着Javadocs之後錯誤地打上了它。 – Ralph 2010-03-05 18:22:42