gpt4 book ai didi

api - GitHub API : How to improve very in-efficient polling on activity events?

转载 作者:行者123 更新时间:2023-12-05 00:29:24 26 4
gpt4 key购买 nike

GitHub APIusers提供事件事件功能, orgsrepos . API 支持 pagination最多 10 页,共 300 页 events与 30 events每页。使用 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对于第二页。同样,我可以从所有 10 个支持的页面中提取事件。

现在让我们说一些事件是在我的 orgs Github 帐户上执行的。让我们假设只发生了 1 个新事件。在这种情况下,当我 poll page-1 的 API与 ETAG它将返回带有新 event 的更改页面包含在其中。同样 pollingpage-2与其之前的 ETAG还将发送更改后的页面。此更改 page-2然而,之前的事件是 page-1 的最后一个事件现在已移至 page-2 的顶部.所有页面都会发生这种“转移到下一个”。没有办法找出发生的新事件的数量。唯一的解决方案是继续在 page-1 上进行轮询。获取最新 events .然而,这种方法有一个严重的缺陷,解释如下:

当新增数量 events时情况变得更糟在我的 poll 之间轮数大于 30(一页上的最大项目数)。在这种情况下,最新的 30 个新事件之前的事件将滑至 page-2直接地。如果我只有 pollpage-1我将失去这些滑到 page-2 的事件.我想到的唯一解决方案是保留整个事件的缓存,然后扫描所有页面。然而,这是一种非常低效且不可取的方法,并且会破坏事件通知 API 的目的。

我希望一些 github-dev 可以回答这个

最佳答案

由于每个事件都有一个 ID 并且事件在响应中是有序的,因此您只需要记住前一个响应中第一个事件的 ID(不是所有事件)。

所以,我会这样做:

初始提取:

  • 获取所有事件页面(从 1 到 10 的页面)
  • 存储第一页的ETAG
  • 在第一页存储第一个事件的ID

  • 后续提取:
  • 使用存储的 ETAG 有条件地获取事件的第一页
  • 如果收到 304 Not modified 响应,则没有新事件,因此终止
  • 如果收到 200 OK 响应,则我们有新事件。从 1 到 10 顺序获取页面,直到包含 ID 等于存储 ID 的事件的第一页。在该事件之前所有新获取的事件都是新事件,应该被处理。因此,作为获取所有事件的结果,直到您之前看到的事件为止,新事件的数量会逐渐被发现。而且您只获取必须获取的页面,仅此而已。
  • 存储第一页的ETAG
  • 在第一页存储第一个事件的ID
  • 等待一段时间,然后转到步骤 1
  • 关于api - GitHub API : How to improve very in-efficient polling on activity events?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17296855/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com