GitHub API为users、orgs和提供活动事件功能repos。API 支持最多 10 个页面的分页,总共 300个页面,每页events30events个页面。速率限制是使用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-2ETAGpage-2page-1page-2page-1events
events当我的poll回合之间的新数量大于 30(一页上的最大项目数)时,情况会变得更糟。在这种情况下,最新的30个新事件之前的事件将page-2直接滑到。如果我只poll在page-1我将失去这些滑落到的事件page-2。我想到的唯一解决方案是保留整个事件的缓存,然后扫描所有页面。然而,这是一种非常低效且不可取的方法,并且会破坏事件通知 API 的目的。
我希望一些 github-dev 可以回答这个问题