标签: github-api

RESTful API 设计:CRUD 轻量级连接的最佳方式?

(请原谅问题标题;很难总结这个问题。)

在 Facebook 上,你的like东西。在推特上,你们这些follow人。在 GitHub 上,您还可以看到follow人员、star存储库和要点。

所有这些情况都非常相似:这些连接是轻量级的,本身并不是真正的“资源”。例如,这三个 API 都没有公开此类连接的公共 ID。

这就提出了一个问题:公开用于创建/查询/删除这些连接的 API 的“最佳”(就 REST 而言)方法是什么?


Facebook 的做法 [ 1 ]:

  • GET /:id/likes查询某个对象的喜欢程度(更准确地说,喜欢该对象的用户)

  • POST /:id/likes喜欢某事(代表经过授权的用户;不需要请求正文)

  • DELETE /:id/likes不喜欢某些东西(代表经过授权的用户)

查询和创建是有意义的,但DELETE有点“非 RESTful”,因为您实际上并没有删除/:id/likes资源(喜欢该对象的用户数组)。

这种差异在另一种情况下也表现出来[ 2 ]:

  • GET /me/likes/:id询问你是否喜欢某事

因此,查询连接是查询与创建或删除它完全不同的资源。


GitHub倾向于/me/likes/:id以下用户和明星存储库的风格[ 3 ]:

(请注意,GitHub/user代表经过身份验证的用户,如 Facebook 的/me。)

  • GET /user/starred/:owner/:repo用于查询您是否有一个已加星标的存储库(返回 204 或 404,两者都没有正文)

  • PUT /user/starred/:owner/:repo用于为回购加注星标(请求中不需要正文)

  • DELETE /user/starred/:owner/:repo用于取消仓库星标

这更加一致,但不幸的是,这将个体“明星”与群体分开: …

api rest web-services github-api facebook-graph-api

6
推荐指数
1
解决办法
1601
查看次数

使用github API从拉取请求号中获取拉取请求合并提交sha

我正在尝试使用github api(通过githubot https://github.com/iangreenleaf/githubot)从拉取请求号获取拉取请求合并提交sha。

我能够得到正确的响应(例如此处的“获取单个拉取请求”下的示例:https : //developer.github.com/v3/pulls/),但是merge_commit_sha给了我这个错误:

fatal: bad object 304fc816f33f808080c9c87895eea2d66081d373
Run Code Online (Sandbox Code Playgroud)

当我在github上比较两个页面时,我在提交页面上看到了merge_commit_sha,但是在拉请求合并页面上看到了一个不同的提交。父母双方相同,但合并提交不同。从api调用返回的一个无效,但另一个让我通过以下方式还原请求请求的提交

git revert -m 1 commit_sha
Run Code Online (Sandbox Code Playgroud)

这是一些示例屏幕截图 在此处输入图片说明 在此处输入图片说明

因此,这引出了两个问题:-这两个提交sha之间有什么区别?为什么只有一个工作才能还原拉取请求?

  • 如何使用github API获取合并请求请求提交sha?

谢谢。

git git-revert github-api hubot

6
推荐指数
2
解决办法
3712
查看次数

如何获取GitHub组织中的所有用户?

我尝试在 GitHub 中获取我的组织中的所有用户。我可以获得用户,但我在分页方面遇到问题 - 我不知道需要浏览多少页。

curl -i -s -u "user:pass" 'https://api.github.com/orgs/:org/members?page=1&per_page=100'
Run Code Online (Sandbox Code Playgroud)

当然,我可以迭代所有页面,直到我的请求不会返回“0”,但我认为这不是一个好主意)

也许 GitHub 有标准方法来获取组织中的所有用户?

github-api

6
推荐指数
1
解决办法
1万
查看次数

如何通过Github API从它的原始更新fork

我已经通过github API创建了一个github存储库的fork.现在,稍后,我想将原始存储库中的任何更新提取到fork中.在我的用例中,这应该始终是一个快进.我已经读取了对原始存储库的访问权限并对fork进行了读写操作.

我想过可能会创建一个Pull Request然后接受(这两个都可以通过API完成),但是这会产生噪音(Pull Requests被创建和销毁)并且似乎不对.

有没有办法通过API做到这一点?

github-api

6
推荐指数
1
解决办法
1170
查看次数

如何获取 GitHub 存储库的所有分支的列表?

我想获取 GitHub 存储库的所有分支的列表(例如https://github.com/eternicode/bootstrap-datepicker),但是我无法找到如何使用octokit.net来做到这一点。

我还想要一个重命名的存储库,我不能只搜索存储库的名称。

有什么提示吗?

澄清:其余 api 在这里描述https://developer.github.com/v3/repos/forks/,但是如何使用 octokit.net 来做到这一点?

.net c# github-api octokit.net

6
推荐指数
2
解决办法
4164
查看次数

GitHub API - 获取repo的分支数量而不列出其所有分支

我目前正在使用GitHub API v3编写一个小项目.

我一直在根据repo包含的分支数进行计算.在没有请求列出该回购的所有分支的情况下,我似乎无法找到这样做的方法.需要请求repo的分支会增加不必要的运行时间,特别是在处理数百个repos时,每个repos包含数十个分支.

显然缺乏这样做的能力让我感到意外,因为通过这样做可以轻松获得一个非常类似的操作,获得组织的回购数量:

  1. 获得一个组织.例如GET https://api.github.com/orgs/cloudify-cosmo,使用适当的GitHub身份验证凭据.
  2. 假设验证成功,在响应正文中有两个名为public_repos和的字段total_private_repos
  3. 要获取repos的数量,只需添加这两个字段的值即可.

那么,我错过了什么吗?是否有一种类似方便的方式(或任何方式)获得回购的分支数量而不必列出其分支?

github-api

6
推荐指数
1
解决办法
1299
查看次数

如何使用github api检查文件创建日期

我正在使用github api来获取文件的内容,但我还想知道文件的创建时间.有没有办法用github api获取这些信息?

git github github-api

6
推荐指数
1
解决办法
987
查看次数

如何在github上对PR上的特定行号进行评论

我正在尝试编写一个小脚本,可以使用eslint输出对github PR进行评论.

问题是eslint给出了每个错误的绝对行号.但是github API想要相对于diff的行号.

来自github API文档:https://developer.github.com/v3/pulls/comments/#create-a-comment

要评论文件中的特定行,您需要首先确定差异中的位置.GitHub提供了一个application/vnd.github.v3.diff媒体类型,您可以在前面的请求中使用它来查看pull请求的diff.需要将diff解释为从文件中的行转换为diff中的位置.位置值是您要评论的文件中第一个"@@"hunk标题的行数.

"@@"行下方的行是位置1,下一行是位置2,依此类推.文件差异中的位置继续通过空白行和额外的空格来增加,直到达到新文件.

在此输入图像描述

因此,如果我想在上面的图像中添加对第5行的新注释,那么我需要将12传递给API

我的问题是如何轻松地将eslint将在其错误消息中提供的新行号映射到github API所需的相对行号

到目前为止我尝试过的

我使用parse-diff将github API提供的diff转换为json对象

[{
  "chunks": [{
    "content": "@@ -,OLD_TOTAL_LINES +NEW_STARTING_LINE_NUMBER,NEW_TOTAL_LINES @@",
    "changes": [
    {
      "type": STRING("normal"|"add"|"del"),
      "normal": BOOLEAN,
      "add": BOOLEAN,
      "del": BOOLEAN,
      "ln1": OLD_LINE_NUMBER,
      "ln2": NEW_LINE_NUMBER,
      "content": STRING,
      "oldStart": NUMBER,
      "oldLines": NUMBER,
      "newStart": NUMBER,
      "newLines": NUMBER
    }
  }]
}]
Run Code Online (Sandbox Code Playgroud)

我在考虑以下算法

  • 从每个文件的NEW_STARTING_LINE_NUMBERto 开始创建一个新行号的数组NEW_STARTING_LINE_NUMBER+NEW_TOTAL_LINES
  • newStart从每个数字中减去并使其成为另一个数组relativeLineNumbers
  • 遍历数组并为每个删除的行(type==='del')增加相应的剩余relativeLineNumbers
  • 对于另一个大块(有线@@)减少相应的剩余relativeLineNumbers

github github-api eslint

6
推荐指数
1
解决办法
804
查看次数

如何使用Github Release API在没有源代码的情况下进行发布?

我正在使用打击命令在Github存储库上发布发行版:

curl -X POST -H "Authorization: token xxxxxxxxx"  -d '{"tag_name": "test", "name":"release-0.0.1","body":"this is a test release"}'  https://api.github.com/repos/xxxxxx
Run Code Online (Sandbox Code Playgroud)

我可以看到创建了一个新版本。但是下面有两个下载按钮:

Source code (zip)
Source code (tar.gz)
Run Code Online (Sandbox Code Playgroud)

没有源代码如何发布?

如果无法删除源代码附件,如何上传其他二进制文件?我试图Upload a release asset像这样使用API POST https://<upload_url>/repos/:owner/:repo/releases/:id/assets?name=foo.zip:,它成功返回,但是在Github发行选项卡上找不到二进制文件。

git github github-api

6
推荐指数
2
解决办法
2872
查看次数

向项目添加请求请求和问题

Github API是否提供一种简便的方法来向项目委员会添加请求请求或问题?

这是程序化的等效方式,即用户转到拉取请求并从侧边栏菜单中选择一个“项目”

注意:API似乎确实提供了一种向项目添加卡片的方法,但是我必须指定一个特定的项目列。我只想盲目添加项目,然后让自动化规则确定该列,类似于通过UI单击它。

谢谢!

github github-api

6
推荐指数
1
解决办法
202
查看次数