鉴于URL https://github.com/foo/bar,我希望能够获得foo的所有回购。如果foo是用户,我需要致电api.repos.getForUser({username: 'foo'})
,如果是组织,我需要致电api.repos.getForOrg({org: 'foo'})
。
我的问题是:如何判断“foo”是组织还是用户?
现在,我以昂贵的方式“解决”它,试图获得一个名为“foo”的组织,如果我得到它,我会尝试获得它的回购;如果我最终得到一个异常(我使用promises),如果异常的代码是“404”,我假设“foo”是一个用户,并试图获得用户回购。
这显然是低效的,并且具有添加可能触发速率限制的呼叫的副作用。
是否有更简单的方法来了解“foo”是用户还是组织?
答案 0 :(得分:2)
众所周知,处理异常代价高昂。因此,您无需尝试获取组织并处理idx = pd.IndexSlice
g.loc[idx[:,'mean'],:]
,而是查看对404
的响应的type
属性,以确定“用户”是否为用户或组织,然后相应地进行。
例如,对我的GitHub用户API https://api.github.com/users/raghav710的调用返回
https://api.github.com/users/<username>
对https://api.github.com/users/Microsoft之类的组织的调用会返回
{
"login": "raghav710",
...
"type": "User",
...
}
更新:只需一次通话即可
我们了解到您已经在尝试访问网址 {
"login": "Microsoft",
...
"type": "Organization",
...
}
并尝试获取该用户或组织的所有回购。
建议是,您可以在https://github.com/<user or organization>/<repo name>
例如在https://api.github.com/repos/Microsoft/vscode
上进行GET给出
https://api.github.com/repos/<user or organization>/<repo name>
正如您所见,所有者密钥下可以使用熟悉的{
"id": 41881900,
"name": "vscode",
"full_name": "Microsoft/vscode",
"owner": {
"login": "Microsoft",
"id": 6154722,
...
"type": "Organization",
},
"private": false,
"html_url": "https://github.com/Microsoft/vscode",
...
}
字段。您可以使用它来决定下一个电话
答案 1 :(得分:1)
因此,即使存在要区分的API调用,您仍然需要该调用来确定它是否是用户。
考虑到大多数存储库应该属于用户这一事实,为什么不反转检查?尝试检索用户存储库,如果失败则获取组织存储库。
此外,我会根据需要缓存尽可能多的信息。用户使用工具时,请勿实时检索所有内容。如果它们甚至能够被改变,很多事情都不会经常改变。