Github API:确定用户还是组织

Tra*_*Guy 2 github-api

给定 URL https://github.com/foo/bar,我希望能够获取 foo 的所有存储库。如果 foo 是用户,我需要调用api.repos.getForUser({username: 'foo'}),如果是组织,我需要调用api.repos.getForOrg({org: 'foo'}).

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

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

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

有没有更简单的方法来知道“foo”是用户还是组织?

rag*_*710 7

众所周知,处理异常的成本很高。因此,您不必尝试获取 org 并处理404,而是可以查看type响应的属性,https://api.github.com/users/<username>以确定“用户”是用户还是组织,然后进行相应操作。

例如,调用我的 GitHub 用户 API https://api.github.com/users/raghav710返回

{
  "login": "raghav710",
  ...
  "type": "User",
  ...
}
Run Code Online (Sandbox Code Playgroud)

对https://api.github.com/users/Microsoft等组织的调用会返回

 {
   "login": "Microsoft",
   ...
   "type": "Organization",
   ...
}
Run Code Online (Sandbox Code Playgroud)

更新:在一次调用中完成此操作

据我所知,您已经在尝试访问某个 URL https://github.com/<user or organization>/<repo name>,并尝试获取该用户或组织的所有存储库。

建议不要尝试在上述链接上执行 GET,而是可以在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",
    ...
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,熟悉的type字段在所有者密钥下可用。您可以用它来决定您的下一次通话