尝试查找文档或弄清楚如何通过v4 graphql API复制GitHub的v3 API Get all users端点。
查询特定用户的任何内容都很容易,但是我如何检索类似于v3 API有效负载列出所有用户的有效负载?
有人可以为我指出正确的文档,甚至可以提供一个返回用户列表的示例吗?
答案 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
}
}
}
}
}