【问题标题】:How to delete a GitHub repo using the API如何使用 API 删除 GitHub 存储库
【发布时间】:2013-10-19 14:45:39
【问题描述】:

我正在熟悉 GitHub API http://developer.github.com/v3/ 我正在尝试使用 Firefox 的 RESTClient 插件和 curl 命令行工具。

我已经找到了如何使用 API 创建 repo,但是我似乎无法使用 API 删除它。

根据此处的帮助:http://developer.github.com/v3/repos/#delete-a-repository 我必须发送这样的 DELETE 请求:

curl -X DELETE -H 'Authorization: token xxx' https://api.github.com/repos/:owner/:repo

帮助没有具体说明,我不确定 :owner 和 :repo 是什么意思 - 这些是名称还是 ID,但我尝试了几种组合的名称和 ID,但均未成功。我收到的回复是:

404 Not Found

我错过了什么?

【问题讨论】:

  • 如果你有github.com/foo/bar,那么:owner就是foo:repo就是bar
  • 谢谢,但curl -X DELETE -H 'Authorization: token xxx' https://api.github.com/repos/foo/bar 还是不行
  • 假凭证和不存在的 repo 会怎样?我明白了:$ curl -X DELETE -H 'Authorization: token xxx' https://api.github.com/repos/foo/bar { "message": "Bad credentials", "documentation_url": "http://developer.github.com/v3" }
  • 我使用了正确的凭据。我把“xxx”放在这里只是作为一个占位符,因为我不想透露我的真实令牌。
  • 是的,但是当你执行那个确切的请求时你会得到什么?你收到的错误信息和我一样,还是 404?

标签: github-api


【解决方案1】:

delete a GitHub repo

curl \
  -X DELETE \
  -H "Accept: application/vnd.github.v3+json" \
  -H "Authorization: token ${token}" \
   https://api.github.com/repos/${username}/${reponame}

定义或替换${token}${username}${reponame}token 必须有权访问 delete_repo 范围。

【讨论】:

    【解决方案2】:

    如果您通过Applications page 创建了您正在使用的令牌,那么此令牌将具有这些scopesuserpublic_reporepogist。您可以通过使用该令牌发出 API 请求并查看响应 HTTP 标头来验证这一点:

    curl -v -H 'Authorization: token xxx' https://api.github.com

    查找X-OAuth-Scopes 响应标头,其中包含范围列表:

    X-OAuth-Scopes: user, public_repo, repo, gist

    但是,要删除存储库,token needs to have the delete_repo scope

    因此,您需要一个与您拥有的范围不同的令牌。您可以使用Authorizations API 创建这样的令牌:

    curl -v -u username -X POST https://api.github.com/authorizations -d '{"scopes":["delete_repo"], "note":"token with delete repo scope"}'

    这将返回一个带有新令牌的 JSON 文档,您应该可以使用它来删除存储库:

    {
      "id": XXXXX,
      "url": "https://api.github.com/authorizations/XXXXX",
      "app": {
        "name": "GitHub API",
        "url": "http://developer.github.com/v3/oauth/#oauth-authorizations-api",
        "client_id": "00000000000000000000"
      },
      "token": "XXXXXX",
      "note": "token with delete repo scope",
      "note_url": null,
      "created_at": "2013-10-11T20:34:49Z",
      "updated_at": "2013-10-11T20:34:49Z",
      "scopes": [
        "delete_repo"
      ]
    }
    

    当然,以这种方式创建令牌时,您可以请求多个范围,而不仅仅是delete_repo 范围。

    另外,作为旁注,当您没有正确授权时 API 返回 404 错误的原因是 prevent information leakage

    【讨论】:

    • Github 网站用户界面现在提供了一种创建具有多个范围的令牌的方法。如果@Ivan Zuzak 可以请更新他的答案以包括如何从命令行创建多范围令牌的当前示例,那将不胜感激。我使用curl -v -u username -X POST https://api.github.com/authorizations -d '{"scopes":["delete_repo"]}' 的尝试没有奏效——可能是因为自原始帖子以来API 发生了变化。
    • ... /:owner/:repo 的原始发帖人示例不正确 -- 冒号需要去掉 -- 这是创建包含delete_repo 授权的令牌后的当前示例:@987654342 @
    • @lawlist 您可能收到一条警告,提示您没有提供“注释”,这是最近的必填字段:developer.github.com/v3/oauth_authorizations/…。我更新了示例以包含注释。如果您仍然遇到问题,请告诉我,并提供您从 API 中得到的错误。
    • 另外,这些冒号是描述 URL 路径部分参数的标准方式:developer.github.com/v3/#parameters
    • 非常感谢您更新您的示例,并解释冒号是一种可接受的描述参数的方法,这些参数将被变量信息替换。如果将来有人需要这个,这里有一个基于您更新示例的多范围令牌示例:curl -v -u USERNAME:PASSWORD -X POST https://api.github.com/authorizations -d '{"scopes":["delete_repo","repo","gist","user"], "note":"Token with multiple scopes."}'
    猜你喜欢
    • 1970-01-01
    • 2023-01-10
    • 2019-04-13
    • 2017-12-08
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    相关资源
    最近更新 更多