通过Github Graphql v4 API列出所有用户

时间:2019-12-01 02:13:42

标签: github graphql

尝试查找文档或弄清楚如何通过v4 graphql API复制GitHub的v3 API Get all users端点。

查询特定用户的任何内容都很容易,但是我如何检索类似于v3 API有效负载列出所有用户的有效负载?

有人可以为我指出正确的文档,甚至可以提供一个返回用户列表的示例吗?

2 个答案:

答案 0 :(得分:3)

据我所知,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

它是字符串04:User,后跟用户id(数据库ID)。

知道了这一点,我们现在可以一次为100个用户生成一个节点查询。注意:并非所有数据库ID都是用户,有些是组织或已删除用户,因此 您会收到很多NOT_FOUND错误。

query($ids:[ID!]!) {
    nodes(ids:$ids) {
        ... on User {
            login
        }
    }
}

variables {
    "ids": ["MDQ6VXNlcjE=", "MDQ6VXNlcjI=", ...]
}

如果您不仅限于使用v4 api,但仍想利用v4 api的改进性能,那么有一个稍微少一点hacky的选择,那就是使用v3 api一次获得100个用户,然后使用返回的node_id字段使用上述技术对所有100个用户执行批量v4查询。使用此方法可以减少NOT_FOUND错误,因此可以更好地利用速率限制。

要想了解使用v4 api和这种技术可以获得的性能改进,我执行的任务从使用v3 api估计需要大约474天减少到使用此方法不到5天。 / p>

答案 1 :(得分:0)

{
  search(query: "location:toronto language:Go", type: USER, first: 10) {
    userCount
    edges {
      node {
        ... on User {
          login
          name
          location
          email
          company
        }
      }
    }
  }
}