Github API: 判断是用户还是组织
Github API: determine if user or org
鉴于 URL https://github.com/foo/bar,我希望能够获得 foo 的所有回购协议。如果 foo 是用户,我需要调用 api.repos.getForUser({username: 'foo'})
如果是组织,我需要调用 api.repos.getForOrg({org: 'foo'})
.
我的问题是:如何判断 "foo" 是组织还是用户?
现在,我 "solve" 它以昂贵的方式试图获得一个名为 "foo" 的组织,如果我得到它,我会尝试获得它的回购协议;如果我最终得到一个异常(我使用承诺)并且如果异常代码是“404”,我假设 "foo" 是一个用户,并尝试获取用户回购。
这显然是低效的,并且具有添加可能触发速率限制的调用的副作用。
有没有更简单的方法来知道 "foo" 是用户还是组织?
所以即使有一个 API 调用来区分,你仍然需要那个调用来确定它是否是一个用户。
考虑到大多数存储库应该属于用户,你为什么不撤销检查?尝试检索用户存储库,如果失败则获取组织存储库。
此外,我会根据需要缓存尽可能多的信息。当用户使用您的工具时,不要实时检索所有内容。许多事情不会经常改变,即使它们能够改变。
众所周知,处理异常的成本很高。因此,与其尝试获取组织并处理 404
,不如查看对 https://api.github.com/users/<username>
的响应的 type
属性 以确定 "user" 是用户或组织,然后相应地进行。
例如呼叫我的 GitHub 用户 API https://api.github.com/users/raghav710 returns
{
"login": "raghav710",
...
"type": "User",
...
}
并致电 https://api.github.com/users/Microsoft returns
这样的组织
{
"login": "Microsoft",
...
"type": "Organization",
...
}
更新:一次调用完成
我了解到您已经在尝试访问 URL https://github.com/<user or organization>/<repo name>
并在其中尝试获取该用户或组织的所有存储库。
一个建议是,您可以在 https://api.github.com/repos/<user or organization>/<repo name>
上执行 GET,而不是尝试在上面的 link 上执行 GET
例如在 https://api.github.com/repos/Microsoft/vscode
上执行 GET
给予
{
"id": 41881900,
"name": "vscode",
"full_name": "Microsoft/vscode",
"owner": {
"login": "Microsoft",
"id": 6154722,
...
"type": "Organization",
},
"private": false,
"html_url": "https://github.com/Microsoft/vscode",
...
}
如您所见,熟悉的 type
字段在 owner 键下可用。您可以使用它来决定您的下一次通话
鉴于 URL https://github.com/foo/bar,我希望能够获得 foo 的所有回购协议。如果 foo 是用户,我需要调用 api.repos.getForUser({username: 'foo'})
如果是组织,我需要调用 api.repos.getForOrg({org: 'foo'})
.
我的问题是:如何判断 "foo" 是组织还是用户?
现在,我 "solve" 它以昂贵的方式试图获得一个名为 "foo" 的组织,如果我得到它,我会尝试获得它的回购协议;如果我最终得到一个异常(我使用承诺)并且如果异常代码是“404”,我假设 "foo" 是一个用户,并尝试获取用户回购。
这显然是低效的,并且具有添加可能触发速率限制的调用的副作用。
有没有更简单的方法来知道 "foo" 是用户还是组织?
所以即使有一个 API 调用来区分,你仍然需要那个调用来确定它是否是一个用户。
考虑到大多数存储库应该属于用户,你为什么不撤销检查?尝试检索用户存储库,如果失败则获取组织存储库。
此外,我会根据需要缓存尽可能多的信息。当用户使用您的工具时,不要实时检索所有内容。许多事情不会经常改变,即使它们能够改变。
众所周知,处理异常的成本很高。因此,与其尝试获取组织并处理 404
,不如查看对 https://api.github.com/users/<username>
的响应的 type
属性 以确定 "user" 是用户或组织,然后相应地进行。
例如呼叫我的 GitHub 用户 API https://api.github.com/users/raghav710 returns
{
"login": "raghav710",
...
"type": "User",
...
}
并致电 https://api.github.com/users/Microsoft returns
这样的组织 {
"login": "Microsoft",
...
"type": "Organization",
...
}
更新:一次调用完成
我了解到您已经在尝试访问 URL https://github.com/<user or organization>/<repo name>
并在其中尝试获取该用户或组织的所有存储库。
一个建议是,您可以在 https://api.github.com/repos/<user or organization>/<repo name>
例如在 https://api.github.com/repos/Microsoft/vscode
上执行 GET给予
{
"id": 41881900,
"name": "vscode",
"full_name": "Microsoft/vscode",
"owner": {
"login": "Microsoft",
"id": 6154722,
...
"type": "Organization",
},
"private": false,
"html_url": "https://github.com/Microsoft/vscode",
...
}
如您所见,熟悉的 type
字段在 owner 键下可用。您可以使用它来决定您的下一次通话