本文介绍如何使用 GitHub CLI、curl
或 JavaScript 使用 GitHub REST API。有关快速入门指南,请参阅“GitHub REST API 快速入门”。
本部分介绍构成 API 请求的元素
对 REST API 的每个请求都包括一个 HTTP 方法和一个路径。根据 REST API 端点,您可能还需要指定请求标头、身份验证信息、查询参数或正文参数。
REST API 参考文档介绍了每个端点的 HTTP 方法、路径和参数。它还显示每个端点的示例请求和响应。有关更多信息,请参阅REST 参考文档。
端点的 HTTP 方法定义了它对给定资源执行的操作类型。一些常见的 HTTP 方法是 GET
、POST
、DELETE
和 PATCH
。REST API 参考文档提供了每个端点的 HTTP 方法。
例如,“列出存储库问题”端点的 HTTP 方法是 GET
。
在可能的情况下,GitHub REST API 努力为每个操作使用适当的 HTTP 方法。
GET
:用于检索资源。
POST
:用于创建资源。
PATCH
:用于更新资源的属性。
PUT
:用于替换资源或资源集合。
DELETE
:用于删除资源。
每个端点都有一个路径。REST API 参考文档提供了每个端点的路径。例如,“列出存储库问题”端点的路径为 /repos/{owner}/{repo}/issues
。
路径中的花括号 {}
表示您需要指定路径参数。路径参数修改端点路径,并且在您的请求中是必需的。例如,“列出存储库问题”端点的路径参数为 {owner}
和 {repo}
。要在 API 请求中使用此路径,请将 {repo}
替换为您希望请求问题列表的存储库名称,并将 {owner}
替换为拥有该存储库的帐户名称。
标头提供有关请求和所需响应的额外信息。以下是一些可以在请求中用于 GitHub REST API 的标头示例。有关使用标头的请求示例,请参阅“提出请求”。
大多数 GitHub REST API 端点指定您应传递值为 application/vnd.github+json
的 Accept
标头。Accept
标头的值是一种媒体类型。有关媒体类型的更多信息,请参阅“媒体类型”。
您应使用此标头指定要在请求中使用的 REST API 版本。有关更多信息,请参阅“API 版本”。
所有 API 请求都必须包含一个有效的 User-Agent
标头。User-Agent
标头标识提出请求的用户或应用程序。
以下是一个名为 Awesome-Octocat-App
的应用程序的 User-Agent
示例
User-Agent: Awesome-Octocat-App
不带User-Agent
标头的请求将被拒绝。如果你提供了无效的User-Agent
标头,你将收到403 Forbidden
响应。
你可以通过将媒体类型添加到请求的Accept
标头来指定一个或多个媒体类型。有关Accept
标头的更多信息,请参阅“Accept
”。
媒体类型指定你希望从 API 中获取的数据的格式。媒体类型特定于资源,允许它们独立更改并支持其他资源不支持的格式。每个 GitHub REST API 端点的文档将描述它支持的媒体类型。有关更多信息,请参阅“GitHub REST API 文档”。
GitHub REST API 支持的最常见的媒体类型是application/vnd.github+json
和application/json
。
有一些自定义媒体类型可以与某些端点一起使用。例如,用于管理提交和拉取请求的 REST API 支持媒体类型diff
、patch
和sha
。媒体类型full
、raw
、text
或html
由其他一些端点使用。
GitHub 的所有自定义媒体类型都如下所示:application/vnd.github.PARAM+json
,其中PARAM
是媒体类型的名称。例如,要指定raw
媒体类型,可以使用application/vnd.github.raw+json
。
有关使用媒体类型的请求示例,请参阅“发出请求”。
许多端点需要身份验证或在你经过身份验证后返回附加信息。此外,当你经过身份验证时,你可以每小时发出更多请求。
许多 API 方法要求或允许你在请求中通过参数发送附加信息。有几种不同类型的参数:路径参数、正文参数和查询参数。
路径参数修改端点路径。这些参数在你的请求中是必需的。有关更多信息,请参阅“路径”。
正文参数允许你向 API 传递附加数据。这些参数可以是可选的或必需的,具体取决于端点。例如,正文参数可能允许你在创建新问题时指定问题标题,或在启用或禁用功能时指定某些设置。每个 GitHub REST API 端点的文档将描述它支持的正文参数。有关更多信息,请参阅“GitHub REST API 文档”。
例如,“创建问题”端点要求你在请求中为新问题指定标题。它还允许你选择性地指定其他信息,例如要放入问题正文的文本、要分配给新问题的用户或要应用于新问题的标签。有关使用正文参数的请求示例,请参阅“进行请求”。
你必须对请求进行身份验证才能传递正文参数。有关更多信息,请参阅“身份验证”。
查询参数允许你控制为请求返回哪些数据。这些参数通常是可选的。每个 GitHub REST API 端点的文档将描述它支持的任何查询参数。有关更多信息,请参阅“GitHub REST API 文档”。
例如,“列出公开事件”端点默认返回三十个问题。您可以使用 per_page
查询参数来返回两个问题,而不是 30 个。您可以使用 page
查询参数仅获取结果的第一页。有关使用查询参数的请求示例,请参阅“发出请求”。
发出请求后,API 将返回响应状态代码、响应标头,以及可能是响应正文。
每个请求都将返回一个 HTTP 状态代码,表示响应的成功与否。有关响应代码的更多信息,请参阅 MDN HTTP 响应状态代码文档。
此外,响应还将包含提供有关响应的更多详细信息的标头。以 X-
或 x-
开头的标头是 GitHub 的自定义标头。例如,x-ratelimit-remaining
和 x-ratelimit-reset
标头告诉你可以在一段时间内发出多少个请求。
许多端点将返回一个响应正文。除非另有说明,否则响应正文采用 JSON 格式。空白字段包含为 null
,而不是省略。所有时间戳均以 UTC 时间、ISO 8601 格式返回:YYYY-MM-DDTHH:MM:SSZ
。
与 GraphQL API 中指定所需信息不同,REST API 通常会返回比所需信息更多的信息。如果需要,可以解析响应以提取特定信息。
响应可以包括资源的所有属性,也可以只包括一部分属性,具体取决于是获取单个资源还是资源列表。
- 当您获取单个资源(例如特定存储库)时,响应通常会包含该资源的所有属性。这是资源的“详细”表示形式。
- 当您获取资源列表(例如多个存储库的列表)时,响应将仅包含每个资源的部分属性。这是资源的“摘要”表示形式。
请注意,授权有时会影响表示形式中包含的详细信息量。
原因是某些属性对于 API 来说计算成本很高,因此 GitHub 从摘要表示形式中排除了这些属性。若要获取这些属性,您可以获取详细表示形式。
文档为每个 API 方法提供了一个示例响应。示例响应说明了该方法返回的所有属性。
所有资源可能都有一个或多个链接到其他资源的 *_url
属性。这些属性旨在提供明确的 URL,以便适当的 API 客户端无需自行构建 URL。强烈建议 API 客户端使用这些属性。这样做将使开发人员更轻松地进行 API 的未来升级。所有 URL 预计都是适当的 RFC 6570 URI 模板。
然后,您可以使用类似于 uri_template gem 的内容扩展这些模板
>> tmpl = URITemplate.new('/notifications{?since,all,participating}')
>> tmpl.expand
=> "/notifications"
>> tmpl.expand all: 1
=> "/notifications?all=1"
>> tmpl.expand all: 1, participating: 1
=> "/notifications?all=1&participating=1"
本文演示了如何在存储库中列出和创建问题。为了获得更多练习,请尝试对问题发表评论、编辑问题的标题或关闭问题。有关更多信息,请参阅 "创建问题评论" 端点 和 "更新问题" 端点。
有关您可以使用的其他端点的更多信息,请参阅 REST 参考文档。