尝试查找文档或弄清楚如何复制 GitHub 的 v3 API通过那里的 v4 graphql API获取所有用户端点。
查询特定用户的任何内容都很容易,但是如何检索与 v3 API 有效负载类似的列出所有用户的有效负载?
有人可以指出我正确的文档,或者更好地提供一个返回用户列表的示例吗?
据我所知,在 v4 api 中没有等同于“获取所有用户”的内容,但是,有一种方法可以使用节点查询来接近它。
首先,您需要能够生成节点 ID 以进行迭代。查看mojombo(数据库 ID 的第一个用户),您可以看到节点 ID 是如何派生的。
$ curl https://api.github.com/users/mojombo
{
"login": "mojombo",
"id": 1,
"node_id": "MDQ6VXNlcjE=",
...
}
$ echo -n "MDQ6VXNlcjE=" | base64 -d
04:User1
Run Code Online (Sandbox Code Playgroud)
它是04:User后跟用户id(数据库 ID)的字符串。
知道了这一点,我们现在可以一次为 100 个用户生成一个节点查询。注意:并非所有数据库 ID 都是用户,有些是组织或已删除的用户,因此您会收到很多NOT_FOUND错误。
query($ids:[ID!]!) {
nodes(ids:$ids) {
... on User {
login
}
}
}
variables {
"ids": ["MDQ6VXNlcjE=", "MDQ6VXNlcjI=", ...]
}
Run Code Online (Sandbox Code Playgroud)
如果您不仅限于使用 v4 api,但仍想利用 v4 api 的改进性能,那么有一个稍微不那么笨拙的替代方案,即使用 v3 api 一次让用户 100,然后使用node_id使用上述技术对所有 100 个用户执行批量 v4 查询的返回字段。使用这种方法会产生更少的NOT_FOUND错误,因此可以更好地利用您的速率限制。
为了让您了解使用 v4 api 和这种技术可以获得的性能改进,我正在执行的任务从使用 v3 api 大约需要 474 天到使用这种方法不到 5 天。
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |