GitHub API为users
、orgs
和提供活动事件功能repos
。API 支持最多 10 个页面的分页,总共 300个页面,每页events
30events
个页面。速率限制是使用ETAG
标头实现的。我正在尝试轮询此 API 以获取最新活动。然而,由于上面提到的 Github 支持的设计,这种方案效率非常低。可以说我提出page-1
请求
https://api.github.com/users/me/events/orgs/my-org?page=1
我会得到ETAG
这个页面的条目。现在我移到下一个page-2
并做
https://api.github.com/users/me/events/orgs/my-org?page=2
并将获得ETAG
第 2 页的。同样,我可以从所有 10 个支持的页面中提取事件。
现在假设在我的 orgs Github 帐户上执行了一些活动。让我们假设只发生了 1 个新事件。在这种情况下,当我poll
使用 API时page-1
,ETAG
它将返回已更改的页面,其中event
包含新的页面。与它的previous类似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 可以回答这个问题