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 键下可用。您可以使用它来决定您的下一次通话