首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从REST中获得新更新的资源?

如何从REST中获得新更新的资源?
EN

Stack Overflow用户
提问于 2020-06-11 04:51:39
回答 2查看 107关注 0票数 0

在典型的REST中,您可以获得以下所有书籍:

代码语言:javascript
复制
GET /books

但是,我希望能够轮询服务器(例如,每10秒一次),以获取任何已更新的书籍,而无需重新获取我已经获取的所有书籍。我的第一个想法是使用一个更新的时间戳来完成它。

例如,如果在最后一次请求中,最新的书籍在2020-06-01 10:30:25.125上更新,我可以按如下方式进行请求,以获得在该时间戳之后更新的所有书籍。

代码语言:javascript
复制
GET /books?updated_at_gt=2020-06-01-10-30-25-125

这在大多数情况下是可行的。然而,有几个角落的案件。

问题所在

使用这种方法的问题是,updated_at时间戳精确到最近的毫秒。如果在同一毫秒内更新多个记录,则会造成问题。这听起来很少见,但可能发生在批量编辑上。

例如,考虑以下一系列事件:

  • 图书1的更新时间为2000000 s。因此,2020-06-01 10:30:25.000
  • Book 2被存储为:updated_at 2在25.125000秒更新。因此,当2020-06-01 10:30:25.125
  • At 3在25.125455s上更新时,updated_at存储为:updated_at 25.125250s GET /books将获得图书1和2。因此,2)
  • GET /books?updated_at_gt=2020-06-01-10-30-25-125也将updated_at存储为:2020-06-01 10:30:25.125 (与图书2020-06-01 10:30:25.125相同)将错过图书3.

解决办法

我的工作是,当API调用在2020-06-01 10:30:00.200上第一次执行时,它实际上将获取服务器请求时间提前50 My更新的所有书籍。

例如,考虑相同的场景:

  • 图书1的更新时间为2000000 s。因此,2020-06-01 10:30:25.000
  • Book 2被存储为:updated_at 2在25.125000秒更新。因此,2020-06-01 10:30:25.125
  • At 25.125250s updated_at存储为:GET /books将在24.6250S‬之前更新所有书籍。因此,它将得到书1,但不是2。
  • 图书3是在25.125455s上更新的。因此,2)
  • GET /books?updated_at_gt=2020-06-01-10-30-25-000也将updated_at存储为:2020-06-01 10:30:25.125 (与图书2020-06-01 10:30:25.125相同)将获得图书2和图书3.

这似乎是一项复杂的工作。

有更好的办法吗?

EN

回答 2

Stack Overflow用户

发布于 2020-06-11 05:09:20

对不起,由于名誉原因,我还不能补充评论。

老实说,我并没有完全理解它为什么会漏掉,不管额外的毫秒细节如何,如果您没有存储它们,那么如果您在update_at_gt中存储的内容完全相同,它又怎么会错过呢?

既然如此,为什么不设置一个介于两者之间的局面呢?存储更新的时间,但要记录上一次调用的时间,并在以前的时间和新的时间之间做一次。

因此,您将确保您的第一个查询始终是在您关心之前的事情。

updated_at_gt >2020-01-01-00-00-00-00-00-000和updated_at_gt <=当前时间(最多可以存储多少毫秒等等)。

然后将存储的时间也是<=,以便下一次,它将是updated_at_gt > time。这样,它就永远不会返回它在<=时所做的一本书。

所以

查询1 updated_at_gt >2020-01-01-00-00-00-00-000和updated_at_gt <= 2020-06-01 10:35:01.1245665

查询二

updated_at_gt > 2020-06-01 10:35:01.1245665和<= 2020-06-01 10:35:11.1245665

举个例子。

票数 0
EN

Stack Overflow用户

发布于 2020-06-11 05:46:31

您可以使用Epoch时间传递API。2020年-06-11:31:53格林尼治标准时间为1591853513.时间可以产生到毫秒的精度,所以一旦服务器接收到时间,它就可以直接减去毫秒,并根据它返回所需的书籍。参考- https://www.epochconverter.com的时代转换器。使用划时代时间将是一个更干净的解决方案,而不是在查询参数中传递日期时间值。

代码语言:javascript
复制
GET /books?updated_at_gt=1591853513

另一种解决方案--如果可以在代码库和数据库上进行修改,我建议您添加一个标志,该标志将为所有图书更新,并在GET API调用中发送。这样,您就不必在任何时候检查,而只需要检查旗子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62317272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档