【问题标题】:How is codeload.github.com different to api.github.com?codeload.github.com 与 api.github.com 有何不同?
【发布时间】:2020-05-28 00:08:23
【问题描述】:

我在浏览 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”有什么区别?

【问题讨论】:

    标签: github github-api tar


    【解决方案1】:

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

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

    【讨论】:

    • 有趣。也许 Next.js 决定不使用 API 以避免处理重定向。你知道codeload.github.com会不会被维护?
    • 我不知道有任何移除或停止支持它的计划,但我强烈建议使用 API。可能存在某些带有引用名称或其他行为的边缘情况,这些情况由 API 将优雅处理的 codeload.github.com URL 以不同方式处理。
    • 当然可以,但是在某些情况下我需要使用 Codeload 而不是 API。我正在构建一个CLI tool,并且代码应该只在其他人的计算机上运行一次,以引导样板。要求用户首先使用 GitHub 令牌进行身份验证是不切实际的。因此,我使用 Codeload 是因为它提供了我需要的确切服务:用于下载的存档。
    • 您可以使用未经身份验证的 REST API 请求,无需令牌。不使用令牌会使您受到较低的速率限制,但它仍然可以工作。
    猜你喜欢
    • 2013-11-17
    • 2015-12-24
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    • 2021-06-28
    • 2010-10-13
    相关资源
    最近更新 更多