REST最佳实践:将客户端同步到服务器

时间:2010-03-05 14:34:08

标签: synchronization rest

我在移动设备上运行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 Not Modified)或更新后的值。 。例如:“GET / widgets / {id}; timestamp = xxx”。

在单个交易中执行相同操作的最佳方法是什么?我可以执行类似“GET / changes”的操作,并且主体具有客户端已经拥有的每一行的类型(小部件或doodad),id和时间戳值吗?我想我知道如何返回值(作为一组变化),但客户如何要求它们?

谢谢,拉尔夫

2 个答案:

答案 0 :(得分:0)

查询如何使用etags,这是他们的用途。对于少量数据,发送整个有效负载状态只会更快,而不是为每个资源多次调用服务器。

答案 1 :(得分:0)

我喜欢这个问题的第3个答案:Patterns for handling batch operations in REST web services?