Github API:确定用户或组织

时间:2018-01-21 06:53:41

标签: github-api

鉴于URL https://github.com/foo/bar,我希望能够获得foo的所有回购。如果foo是用户,我需要致电api.repos.getForUser({username: 'foo'}),如果是组织,我需要致电api.repos.getForOrg({org: 'foo'})

我的问题是:如何判断“foo”是组织还是用户?

现在,我以昂贵的方式“解决”它,试图获得一个名为“foo”的组织,如果我得到它,我会尝试获得它的回购;如果我最终得到一个异常(我使用promises),如果异常的代码是“404”,我假设“foo”是一个用户,并试图获得用户回购。

这显然是低效的,并且具有添加可能触发速率限制的呼叫的副作用。

是否有更简单的方法来了解“foo”是用户还是组织?

2 个答案:

答案 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>

上进行GET,而不是尝试在上述链接上进行GET

例如在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调用,您仍然需要该调用来确定它是否是用户。

考虑到大多数存储库应该属于用户这一事实,为什么不反转检查?尝试检索用户存储库,如果失败则获取组织存储库。

此外,我会根据需要缓存尽可能多的信息。用户使用工具时,请勿实时检索所有内容。如果它们甚至能够被改变,很多事情都不会经常改变。