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

11

我正在浏览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}`])
  )
}

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

这是一个解释如何从GitHub获取tar.gz文件的帖子,但是没有提到"codeload"子域名。 它与"api"有什么不同?

1个回答

13
GitHub API提供了获取归档下载链接的最佳方式。当您在该链接上进行GET请求时,它将重定向您到上的URL。codeload是提供下载存档文件的服务,并且由于缓存原因,它有自己的域名。
虽然可以直接使用codeload URL,但通常应使用API URL,因为它可以更优雅地处理身份验证等问题,而私有存储库的codeload URL通常是短暂的。

1
有趣。也许Next.js决定不使用API,以避免处理重定向。你知道codeload.github.com是否会得到维护吗? - Paul Razvan Berg
1
我不知道是否有任何计划将其删除或停止支持,但我强烈建议使用API。codeload.github.com URL可能会出现某些边缘情况或其他行为,而API可以优雅地处理这些情况,例如ref名称等。 - bk2204
当然,有些情况下我需要使用Codeload而不是API。我正在构建一个CLI工具,并且代码只应在其他人的计算机上运行一次,以引导样板文件。要求用户首先使用GitHub令牌进行身份验证将是不切实际的。因此,我使用Codeload,因为它提供了我所需的确切服务:用于下载的存档。 - Paul Razvan Berg
您可以使用未经身份验证的REST API请求,无需令牌。不使用令牌将使您受到较低的速率限制,但仍然可以正常工作。 - bk2204

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接