我有一个 REST 服务器和一个在移动设备上运行的客户端应用程序。客户端有一些数据并希望从服务器获取数据更新。如何以 RESTful 方式在单个事务中执行此操作?
假设客户有以下元素:
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
仅包含更改的行。
客户端想告诉服务器它有什么,以便服务器可以发送更新。我不想与服务器建立多个连接,因为移动连接不可靠,我不想冒险获取部分数据。
如果我要进行多个连接,我可能会让客户端为它具有 ID 和时间戳的每个项目生成 GET 请求,并且服务器可以不回复任何内容(304 未修改)或适当的更新值.例如:“GET/widgets/{id};timestamp=xxx”。
在单笔交易中做同样事情的最佳方式是什么?我可以做类似“GET/changes”的事情并且正文具有客户端已经拥有的每一行的类型(小部件或装饰物),id 和时间戳值吗?我想我知道如何返回值(作为更改的集合),但客户如何要求它们?
谢谢,拉尔夫
最佳答案
查找如何使用 etags ,这种事情就是他们的目的。对于少量数据,发送整个有效负载状态比为每个资源多次调用服务器会更快。
关于synchronization - REST 最佳实践 : synchronizing a client to a server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2387424/