aun*_*uny 4 api github polling github-api
GitHub的API提供了活动事件的特征users
,orgs
和repos
.API支持分页最多10页,总共300 页,每页events
30 events
页.使用ETAG
标头实现速率限制.我正在尝试轮询此API以获取最新活动.然而,由于Github所提供的设计,该方案非常低效.可以说,我就请求page-1
通过
https://api.github.com/users/me/events/orgs/my-org?page=1
Run Code Online (Sandbox Code Playgroud)
我将获得ETAG
此页面的条目.现在我移动到下一个page-2
并做
https://api.github.com/users/me/events/orgs/my-org?page=2
Run Code Online (Sandbox Code Playgroud)
并将获得ETAG
第2页.同样,我可以从所有10个支持的页面中提取事件.
现在让我们说我的orgs Github帐户上执行了一些活动.让我们假设只发生了一个新事件.在这种情况下,当我使用它poll
的API 将返回已更改的页面,其中包含新的.同样在其前面也将发送改变页.然而,这种变化是之前最后一次事件并且现在已经移至顶部的事件.所有页面都会发生这种"转移到下一个".没有办法找出发生的新事件的数量.唯一的解决方案是继续轮询以获取最新信息.然而,这种方法有一个严重的缺陷解释如下:page-1
ETAG
event
polling
page-2
ETAG
page-2
page-1
page-2
page-1
events
当events
我的poll
轮次之间的新数量大于30(一页上的最大项目)时,情况会变得更糟.在这种情况下,最新的30个事件之前的事件将page-2
直接滑到.如果我只是poll
在page-1
我身上会失去这些滑倒的事件page-2
.我想到的唯一解决方案是保留整个事件的缓存,然后扫描所有页面.然而,这是一种非常有效且不可取的方式,并且杀死事件通知API的目的.
我希望有些github-dev可以回答这个问题
由于每个事件都有一个ID,并且事件在响应中排序,因此您只需记住上一个响应中的第一个事件的ID(而不是所有事件).
所以,我这样做的方式是:
初始提取:
后续提取: