如何使分页数据与后端保持同步?

时间:2019-03-30 13:53:17

标签: android rest pagination synchronization

我正在构建一个Android应用程序,并且一直在努力寻找使分页数据与后端保持同步的最佳方法。

例如,假设我们有一个else端点。这样会获取一系列可供租用的“构建” JSON对象。

响应如下:

GET /building?&status=free&page=1&size=5

比方说,在后端,您最多可以租用20栋建筑物。您刚刚获取了第一页。

您将第四和第五座建筑物标记为“出租”,因此它们不再可用。让我们想象一下您通过某个UI按钮执行此操作,并发送一个PUT请求以更新每个状态。像{ "data": [ { "id": 1, "street": "Some street name 1", "status": "free", }, { "id": 2, "street": "Some street name 2", "status": "free", }, { "id": 3, "street": "Some street name 3", "status": "free", }, { "id": 4, "street": "Some street name 4", "status": "free", }, { "id": 5, "street": "Some street name 5", "status": "free", } ], "metadata": { "total_pages": 4, "page_size": 5, "current_page": 1 } } PUT /building/4?status="rented"

后端的记录将更改为以下状态:

PUT /building/5?status="rented"

现在在后端,如果我们查询可用的建筑物,我们将得到以下内容:

1|First Building |Some street|Free
2|Second Building|Some street|Free
3|Third Building |Some street|Free
4|Forth Building |Some street|Rented
5|Fifth Building |Some street|Rented

现在,如果我们触发相同的请求,但是对于第二页,类似1|First Building |Some street|Free 2|Second Building |Some street|Free 3|Third Building |Some street|Free 6|Sixth Building |Some street|Free 7|Seventh Building|Some street|Free 的东西,我们将得到类似的东西:

GET /building?&status=free&page=2&size=5

因此缺少了第一页上现在的第六和第七栋建筑物。

有人知道如何正确处理吗?我使用的某些解决方案隐含使用套接字消息在客户端刷新这些更改。但是,仍然不是最理想的解决方案。

我希望我能说清楚一点,如果我有任何遗漏,请随时向我提出反馈。

谢谢

1 个答案:

答案 0 :(得分:1)

更改资源的语义可能会简化您的生活。

GET /building?&status=free&from=1&to=5

这是一个单一资源,用于描述一组固定的项目,取决于是否满足过滤条件,这些项目可能存在也可能不存在。下一页是

GET /building?&status=free&from=6&to=10

以此类推。

Working with timelines使用ID和计数来描述类似的想法

GET /building?&status=free&max_id=5&count=5
GET /building?&status=free&max_id=10&count=5