Github Api - 如何跟踪移动的回购/项目?

时间:2015-03-04 19:26:45

标签: github github-api

我在应用程序方面遇到问题我通过github API跟踪一些github repos。当我手动移动或重命名我的应用程序正在跟踪的项目(在github上)时,我失去了它(当我调用旧的api url时获得404)。我注意到当我通过浏览器导航到我的旧项目URL时,我得到301并被重定向到正确的页面。有没有一种简单的方法可以通过api找到项目的新位置?也许通过" id"属性还是什么?谢谢!

例如: old:github.com/api/v3/repos/group/app1 重命名为:github.com/api/v3/repos/group/app2

当我打电话给github.com/api/v3/repos/group/app2时,我得到了404 当我导航到github.com/group/app1时,我收到301并被重定向到github.com/group/app2

干杯。

1 个答案:

答案 0 :(得分:7)

我遇到了这个确切的issue,并且能够从Github支持中获得一些非常有用的信息。

目前,API不会重定向存储库或用户重命名,例如github.com,但截至2015年4月17日,您可以preview repository redirects

6to5/6to5作为示例重新命名为babel/babel。如您所知,对https://api.github.com/repos/6to5/6to5的请求将返回404,但我们可以通过将application/vnd.github.quicksilver-preview+json作为Accept标题传递来预览即将推出的回购重定向功能:

$ curl -i -H "Accept: application/vnd.github.quicksilver-preview+json" https://api.github.com/repos/6to5/6to5

这将返回301和带有url键的响应,其值是我们要查找的仓库的链接:

{
  "message": "Moved Permanently",
  "url": "https://api.github.com/repositories/24560307",
  "documentation_url": "https://developer.github.com/v3/#http-redirects"
}

或者,您可以使用唯一的id属性(永不更改)来跟踪存储库(或用户),无论名称如何更改。

让我们再次以babel/babelnée6to5/6to5为例。它的回购id24560307。您可以使用此来调用/repositories/:id端点(例如https://api.github.com/repositories/24560307),并保证只要它仍然存在就可以获得该回购。

以下是我与GitHub支持部门的交流记录,供参考:

  

检测重命名的仓库

     

您好。

     

有没有办法使用Github API检测重命名的存储库?

     

例如,最近将6to5 / 6to5重命名为babel / babel。正在运行curl -i https://github.com/6to5/6to5会返回301,其中“位置”字段指向新位置。但是,运行curl -i https://api.github.com/repos/6to5/6to5会返回404。

     

无论如何使用API​​获取该位置字段?如果没有,那么使用不使用API​​的HEAD请求是一种有效的解决方法,还是有更好的方法来实现我的目标?我正在尝试在codetriage / codetriage(https://github.com/codetriage/codetriage/issues/228)上解决这个问题。

     

感谢您提供的任何帮助。

     

一切顺利,   O型我


  

嗨O-I,

     

你是对的 - API不会像github.com那样在存储库或用户名重命名上重定向。这可能是我们将来会提供的东西(我同意它会有用),但我不能对此做出任何承诺。感谢您表达兴趣!

     

目前,有一种方法可以处理API脚本和应用程序中的重命名 - 而不是使用存储库的名称来发出API请求,您可以使用存储库的ID(在存储库时不会更改)重命名或转移。)

     

例如,github / linguist的ID是1725199:

     

https://api.github.com/repos/github/linguist

     

现在您知道了,您可以通过ID获取存储库:

     

https://api.github.com/repositories/1725199

     

如果您没有跟踪存储库的ID,而您拥有的只是以前的名称,那么向github.com发送HEAD请求以查看您将被重定向的位置是我能想到的唯一解决方法。时刻。

     

希望这有帮助,如果您有任何其他问题,请告知我们。

     

干杯,   伊万


  

嗨O-I,

     

我认为您可能有兴趣知道我们很快会在API中为重命名的存储库提供重定向。您现在可以预览重定向功能,我们将在接下来的几个月内为所有请求启用它。您可以在今天https://developer.github.com的帖子中了解更多相关信息:

     

https://developer.github.com/changes/2015-04-17-preview-repository-redirects/

     

如果您尝试一下,我们很乐意就此功能是否符合您的需求提供反馈。

     

一切顺利,   杰森