codeload.github.com 与 api.github.com 有何不同?

How is codeload.github.com different to api.github.com?

我正在浏览 next.js 存储库并注意到此功能可以从 GitHub 下载并提取模板,其中 tar:

export async function downloadAndExtractExample(
  root: string,
  name: string
): Promise<void> {
  return await promisePipe(
    got.stream('https://codeload.github.com/zeit/next.js/tar.gz/canary'),
    tar.extract({ cwd: root, strip: 3 }, [`next.js-canary/examples/${name}`])
  )
}

我在 Whosebug 上搜索,只找到了这个:

这是一个解释如何从 GitHub 中提取 tar.gz 的线程,但没有提及 "codeload" 子域。它与 "api" 有何不同?

GitHub API 提供了获取 URL 下载存档的最佳方式。当您在 URL 上发出 GET 请求时,它会将您重定向到 codeload.github.com 上的 URL。 codeload 是提供下载档案的服务,出于缓存原因,它位于自己的域中。

虽然可以直接使用代码加载 URL,但您通常希望使用 API URL,因为它可以更优雅地处理诸如身份验证之类的事情,并且代码加载 URL 私有存储库通常是短暂的。