Skip to main content

REST API 入门

了解如何使用 GitHub REST API。

关于 GitHub REST API

本文介绍如何通过 GitHub CLI、JavaScript 或 curl 使用 GitHub REST API。 若需查看快速入门指南,请参阅“GitHub REST API 快速入门”。

向 REST API 发出请求时,会指定 HTTP 方法和路径。 此外,还可以指定请求头和路径、查询或正文参数。 API 会返回响应状态代码、响应头,并可能返回响应正文。

REST API 参考文档介绍了每个操作的 HTTP 方法、路径和参数。 它还显示每个操作的示例请求和响应。 有关详细信息,请查看 REST 参考文档

若要详细了解 GitHub 的 API,请参阅“Comparing GitHub's REST API and GraphQL API”。

发出请求

若要发出请求,请先找到要使用的操作的 HTTP 方法和路径。 例如,“获取 Octocat”操作使用 GET 方法和 /octocat 路径。 有关此操作的完整参考文档,请参阅“元数据”。

注意:必须安装 GitHub CLI 才能使用 GitHub CLI 示例中的命令。 有关安装说明,请参阅 GitHub CLI 存储库

如果尚未向 GitHub CLI 进行身份验证,则必须在发出任何请求之前使用 gh auth login 子命令进行身份验证。 有关详细信息,请参阅“身份验证”。

若要使用 GitHub CLI 发出请求,请使用 api 子命令以及路径。 使用 --method-X 标志指定方法。

gh api /octocat --method GET

注意:必须安装和导入 octokit 才能使用 JavaScript 示例中使用的 Octokit.js 库。 有关详细信息,请参阅 Octokit.js 自述文件

若要使用 JavaScript 发出请求,可以使用 Octokit.js。 有关详细信息,请参阅“使用 REST API 和 JavaScript 编写脚本”。

首先,创建 Octokit 的实例。

const octokit = new Octokit({ });

然后,使用 request 方法发出请求。 将 HTTP 方法和路径作为第一个参数传递。

await octokit.request("GET /octocat", {});

在路径前面附加 GitHub REST API 的基 URL https://api.github.com,以获取完整 URL:https://api.github.com/octocat

在命令行中使用 curl 命令。 使用 --request-X 标志,后跟 HTTP 方法。 使用 --url 标志,后跟完整 URL。

curl --request GET \
--url "https://api.github.com/octocat"

注意:如果收到类似于“找不到命令: curl”的消息,则可能需要下载并安装 curl。 有关详细信息,请参阅 curl 项目下载页面

继续阅读,了解如何进行身份验证、发送参数和使用响应。

身份验证

许多操作需要身份验证或是在进行身份验证后返回其他信息。 此外,在进行身份验证时,可以每小时发出更多请求。

尽管某些 REST API 操作在未进行身份验证的情况下可访问,但你必须向 GitHub CLI 进行身份验证才能使用 api 子命令。

关于令牌

可以通过添加令牌对请求进行身份验证。

如果要将 GitHub REST API 用于个人用途,可以创建 personal access token。 本文中使用的 REST API 操作需要 personal access tokens (classic) 的 repo 范围,或者在另有说明的情况下具有对 fine-grained personal access token 的公共存储库的只读访问权限。 其他操作可能需要不同的范围 或权限。 有关创建 personal access token 的详细信息,请参阅“管理个人访问令牌”。

如果要代表组织或其他用户使用 API,GitHub 建议使用 GitHub App。 如果某个操作可用于 GitHub Apps,则该操作的 REST 参考文档会显示“适用于 GitHub 应用”。 本文中使用的 REST API 操作需要将 issues 读取和写入权限用于 GitHub Apps。 其他操作可能需要不同的权限。 有关详细信息,请参阅“注册 GitHub 应用”、“关于使用 GitHub 应用进行身份验证”和“代表用户使用 GitHub 应用进行身份验证”。

如果要在 GitHub Actions 工作流中使用 API,则 GitHub 建议使用内置 GITHUB_TOKEN 进行身份验证,而不是创建令牌。 可以使用 permissions 密钥向 GITHUB_TOKEN 授予权限。 有关详细信息,请参阅“自动令牌身份验证”。

有关可用于保护令牌安全的最佳做法的详细信息,请参阅“确保 API 凭据安全”。

身份验证示例

借助 GitHub CLI,无需提前创建访问令牌。 使用 auth login 子命令向 GitHub CLI 进行身份验证:

gh auth login

可以使用 --scopes 标志指定所需的范围。 如果要使用创建的令牌进行身份验证,可以使用 --with-token 标志。 有关详细信息,请参阅 GitHub CLI auth login 文档

警告:将访问令牌视为密码。

若要确保令牌安全,可以将令牌存储为机密,并通过 GitHub Actions 运行脚本。 有关详细信息,请参阅“在 GitHub Actions 中使用机密”。

还可以将令牌存储为 Codespaces 机密,并在 Codespaces 中运行脚本。 有关详细信息,请参阅“管理 codespace 的机密”。

如果无法使用这些选项,请考虑使用其他 CLI 服务安全地存储令牌。

若要使用 Octokit.js 库进行身份验证,可以在创建 Octokit 的实例时传递令牌。 将 YOUR-TOKEN 替换为令牌。

const octokit = new Octokit({ 
  auth: 'YOUR-TOKEN',
});

警告:将访问令牌视为密码。

若要帮助确保帐户安全,可以使用 GitHub CLI 而不是 curl 命令。 GitHub CLI 会为你处理身份验证。 有关详细信息,请参阅此页面的 GitHub CLI 版本。

还可以将令牌存储为 Codespaces 机密,并通过 Codespaces 使用命令行。 有关详细信息,请参阅“管理 codespace 的机密”。

如果无法使用这些选项,请考虑使用其他 CLI 服务安全地存储令牌。

curl 命令中,会发送包含令牌的 Authorization 标头。 将 YOUR-TOKEN 替换为你的令牌:

curl --request GET \
--url "https://api.github.com/octocat" \
--header "Authorization: Bearer YOUR-TOKEN"

注意:在大多数情况下,可以使用 Authorization: BearerAuthorization: token 传递令牌。 但是,如果要传递 JSON Web 令牌 (JWT),则必须使用 Authorization: Bearer

适用于 GitHub Actions 的身份验证示例

还可以使用 run 关键字在 GitHub Actions 工作流中执行 GitHub CLI 命令。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。

不要使用 gh auth login 命令,而是将令牌作为名为 GH_TOKEN 的环境变量进行传递。 GitHub 建议使用内置 GITHUB_TOKEN 进行身份验证,而不是创建令牌。 如果无法执行此操作,请将令牌存储为机密,并将以下示例中的 GITHUB_TOKEN 替换为机密的名称。 有关 GITHUB_TOKEN 的详细信息,请参阅“自动令牌身份验证”。 有关机密的详细信息,请参阅“在 GitHub Actions 中使用机密”。

jobs:
  use_api:
    runs-on: ubuntu-latest
    permissions: {}
    steps:
      - env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh api /octocat

还可以在 GitHub Actions 工作流中使用 run 关键字执行 JavaScript 脚本。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。

GitHub 建议使用内置 GITHUB_TOKEN 进行身份验证,而不是创建令牌。 如果无法执行此操作,请将令牌存储为机密,并将以下示例中的 GITHUB_TOKEN 替换为机密的名称。 有关 GITHUB_TOKEN 的详细信息,请参阅“自动令牌身份验证”。 有关机密的详细信息,请参阅“在 GitHub Actions 中使用机密”。

以下示例工作流:

  1. 签出存储库内容
  2. 设置 Node.js
  3. 安装 octokit
  4. GITHUB_TOKEN 的值存储为名为 TOKEN 的环境变量,并运行 .github/actions-scripts/use-the-api.mjs(它可以将该环境变量作为 process.env.TOKEN 进行访问)。

示例工作流:

on:
  workflow_dispatch:
jobs:
  use_api_via_script:
    runs-on: ubuntu-latest
    permissions: {}
    steps:
      - name: Check out repo content
        uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: '16.17.0'
          cache: npm

      - name: Install dependencies
        run: npm install octokit

      - name: Run script
        env:
          TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          node .github/actions-scripts/use-the-api.mjs

文件路径为 .github/actions-scripts/use-the-api.mjs 的示例 JavaScript 脚本:

import { Octokit } from "octokit";

const octokit = new Octokit({ 
  auth: process.env.TOKEN,
});

await octokit.request("GET /octocat", {});

可以使用 actions/github-script 操作运行脚本,而不是将脚本存储在单独文件中并从工作流中执行脚本。 有关详细信息,请参阅 actions/github-script README

jobs:
  use_api_via_script:
    runs-on: ubuntu-latest
    permissions: {}
    steps:
      - uses: actions/github-script@v6
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            await github.request('GET /octocat', {})

还可以在 GitHub Actions 工作流中使用 run 关键字执行 curl 命令。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。

GitHub 建议使用内置 GITHUB_TOKEN 进行身份验证,而不是创建令牌。 如果无法执行此操作,请将令牌存储为机密,并将以下示例中的 GITHUB_TOKEN 替换为机密的名称。 有关 GITHUB_TOKEN 的详细信息,请参阅“自动令牌身份验证”。 有关机密的详细信息,请参阅“在 GitHub Actions 中使用机密”。

jobs:
  use_api:
    runs-on: ubuntu-latest
    permissions: {}
    steps:
      - env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          curl --request GET \
          --url "https://api.github.com/octocat" \
          --header "Authorization: Bearer $GH_TOKEN"

使用标头

大多数操作会指定应传递包含 application/vnd.github+json 值的 Accept 标头。 其他操作可能会指定应发送不同的 Accept 标头或其他标头。

若要使用 GitHub CLI 发送标头,请使用 --header-H 标志,后跟采用 key: value 格式的标头。

gh api --header 'Accept: application/vnd.github+json' --header 'X-GitHub-Api-Version:2022-11-28' --method GET /octocat

Octokit.js 库会自动传递 Accept: application/vnd.github+json 标头。 若要传递其他标头或不同的 Accept 标头,请将 headers 属性添加到对象,该属性会作为第二个参数传递给 request 方法。 headers 属性的值是将标头名称作为键并将标头值作为值的对象。 例如,若要发送具有 text/plain 值的 content-type 标头:

await octokit.request("GET /octocat", {
  headers: {
    "content-type": "text/plain",
    "X-GitHub-Api-Version": "2022-11-28",
  },
});

若要在 curl 命令中发送标头,请使用 --header-H 标志,后跟采用 key: value 格式的标头。

curl --request GET \
--url "https://api.github.com/octocat" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" \
--header "X-GitHub-Api-Version: 2022-11-28"

使用路径参数

路径参数会修改操作路径。 例如,“列出存储库问题”路径为 /repos/{owner}/{repo}/issues。 大括号 {} 表示需要指定的路径参数。 在这种情况下,必须指定存储库所有者和名称。 有关此操作的参考文档,请参阅“问题”。

若要从 octocat/Spoon-Knife 存储库获取问题,请将 {owner}替换为 octocat,并将 {repo} 替换为 Spoon-Knife

gh api --header 'Accept: application/vnd.github+json' --method GET /repos/octocat/Spoon-Knife/issues

使用 Octokit.js 发出请求时,所有参数(包括路径参数)都会在对象中作为第二个参数传递给 request 方法。 若要从 octocat/Spoon-Knife 存储库获取问题,请将 owner 指定为 octocat,并将 repo 指定为 Spoon-Knife

await octokit.request("GET /repos/{owner}/{repo}/issues", {
  owner: "octocat",
  repo: "Spoon-Knife"
});

若要从 octocat/Spoon-Knife 存储库获取问题,请将 {owner}替换为 octocat,并将 {repo} 替换为 Spoon-Knife。 若要生成完整路径,请在前面附加 GitHub REST API 的基 URL https://api.github.comhttps://api.github.com/repos/octocat/Spoon-Knife/issues

curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN"

该操作返回问题列表以及有关每个问题的数据。 有关使用响应的详细信息,请参阅“使用响应”部分。

使用查询参数

查询参数使你可以控制为请求返回的数据。 例如,查询参数可用于指定响应进行分页时返回的项数。

默认情况下,“列出存储库问题”操作返回三十个问题,按创建日期的降序排序。 可以使用 per_page 参数返回 2 个问题,而不是 30 个问题。 可以使用 sort 参数按上次更新日期(而不是创建日期)对问题进行排序。 可以使用 direction 参数按升序(而不是降序)对结果进行排序。

对于 GitHub CLI,使用 -F 标志传递作为数字、布尔值或 null 的参数。 使用 -f 传递字符串参数。

gh api --header 'Accept: application/vnd.github+json' --method GET /repos/octocat/Spoon-Knife/issues -F per_page=2 -f sort=updated -f direction=asc

某些操作使用属于数组的查询参数。 要在查询字符串中发送数组,请为每个数组项使用查询参数一次,并在查询参数名称后追加 []。 例如,要提供两个存储库 ID 的数组,请使用 -f repository_ids[]=REPOSITORY_A_ID -f repository_ids[]=REPOSITORY_B_ID

要将 GitHub CLI 与属于数组的查询参数一起使用,必须使用 GitHub CLI 版本 2.31.0 或更高版本。 有关升级说明,请参阅 GitHub CLI 存储库

使用 Octokit.js 发出请求时,所有参数(包括查询参数)都会在对象中作为第二个参数传递给 request 方法。

await octokit.request("GET /repos/{owner}/{repo}/issues", {
  owner: "octocat",
  repo: "Spoon-Knife",
  per_page: 2,
  sort: "updated",
  direction: "asc",
});

对于 curl 命令,向路径末尾添加 ?,然后采用 parameter_name=value 形式追加查询参数名称和值。 使用 & 分隔多个查询参数。

curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues?per_page=2&sort=updated&direction=asc" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN"

某些操作使用属于数组的查询参数。 要在查询字符串中发送数组,请为每个数组项使用查询参数一次,并在查询参数名称后追加 []。 例如,要提供两个存储库 ID 的数组,请使用 ?repository_ids[]=REPOSITORY_A_ID&repository_ids[]=REPOSITORY_B_ID

该操作返回问题列表以及有关每个问题的数据。 有关使用响应的详细信息,请参阅“使用响应”部分。

使用正文参数

正文参数使你可以将其他数据传递给 API。 例如,“创建问题”操作要求为新问题指定标题。 它还使你可以指定其他信息,例如要放入问题正文中的文本。 有关此操作的完整参考文档,请参阅“问题”。

“创建问题”操作使用的路径与上面示例中的“列出存储库问题”操作相同,但它使用 POST 方法而不是 GET 方法。

对于 GitHub CLI,使用 -F 标志传递作为数字、布尔值或 null 的参数。 使用 -f 传递字符串参数。 如果参数是数组,则必须将 [] 追加到参数名称。

要将 GitHub CLI 与属于数组的正文参数一起使用,必须使用 GitHub CLI 版本 2.21.0 或更高版本。 有关升级说明,请参阅 GitHub CLI 存储库

gh api --header 'Accept: application/vnd.github+json' --method POST /repos/octocat/Spoon-Knife/issues -f title="Created with the REST API" -f body="This is a test issue created by the REST API" -f "labels[]=bug"

如果使用的是 fine-grained personal access token,则必须将 octocat/Spoon-Knife 替换为属于你或你所在的组织的存储库。 令牌必须有权访问该存储库,并且对存储库问题具有读取和写入权限。 有关创建存储库的详细信息,请参阅“创建存储库”。 有关向 fine-grained personal access token 授予访问权限和特权的详细信息,请参阅“管理个人访问令牌”。

使用 Octokit.js 发出请求时,所有参数(包括正文参数)都会在对象中作为第二个参数传递给 request 方法。

await octokit.request("POST /repos/{owner}/{repo}/issues", {
  owner: "octocat",
  repo: "Spoon-Knife",
  title: "Created with the REST API",
  body: "This is a test issue created by the REST API",
});

如果使用的是 fine-grained personal access token,则必须将 octocat/Spoon-Knife 替换为属于你或你所在的组织的存储库。 令牌必须有权访问该存储库,并且对存储库问题具有读取和写入权限。 有关创建存储库的详细信息,请参阅“创建存储库”。 有关向 fine-grained personal access token 授予访问权限和特权的详细信息,请参阅“管理个人访问令牌”。

对于 curl,使用 --data 标志在 JSON 对象中传递正文参数。

curl --request POST \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" \
--data '{
  "title": "Created with the REST API",
  "body": "This is a test issue created by the REST API"
}'

该操作创建一个问题并返回有关新问题的数据。 在响应中,找到问题的 html_url 并在浏览器中导航到问题。 有关使用响应的详细信息,请参阅“使用响应”部分。

使用响应

关于响应代码和标头

每个请求都会返回 HTTP 状态代码,以指示响应是否成功。 有关响应代码的详细信息,请参阅 MDN HTTP 响应状态代码文档

此外,响应会包含标头,以提供有关响应的更多详细信息。 以 X-x- 开头的标头对于 GitHub 是自定义的。 例如,x-ratelimit-remainingx-ratelimit-reset 标头会告知你在一段时间内可以发出的请求数。

若要查看状态代码和标头,请在发送请求时使用 --include--i 标志。

例如,以下请求:

gh api --header 'Accept: application/vnd.github+json' --method GET /repos/octocat/Spoon-Knife/issues -F per_page=2 --include

返回响应代码和标头,如下所示:

HTTP/2.0 200 OK
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
Cache-Control: private, max-age=60, s-maxage=60
Content-Security-Policy: default-src 'none'
Content-Type: application/json; charset=utf-8
Date: Thu, 04 Aug 2022 19:56:41 GMT
Etag: W/"a63dfbcfdb73621e9d2e89551edcf9856731ced534bd7f1e114a5da1f5f73418"
Link: <https://api.github.com/repositories/1300192/issues?per_page=1&page=2>; rel="next", <https://api.github.com/repositories/1300192/issues?per_page=1&page=14817>; rel="last"
Referrer-Policy: origin-when-cross-origin, strict-origin-when-cross-origin
Server: GitHub.com
Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
Vary: Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With
X-Accepted-Oauth-Scopes: repo
X-Content-Type-Options: nosniff
X-Frame-Options: deny
X-Github-Api-Version-Selected: 2022-08-09
X-Github-Media-Type: github.v3; format=json
X-Github-Request-Id: 1C73:26D4:E2E500:1EF78F4:62EC2479
X-Oauth-Client-Id: 178c6fc778ccc68e1d6a
X-Oauth-Scopes: gist, read:org, repo, workflow
X-Ratelimit-Limit: 15000
X-Ratelimit-Remaining: 14996
X-Ratelimit-Reset: 1659645499
X-Ratelimit-Resource: core
X-Ratelimit-Used: 4
X-Xss-Protection: 0

在此示例中,响应代码为 200,指示请求成功。

使用 Octokit.js 发出请求时,request 方法会返回承诺。 如果请求成功,则承诺会解析为包含响应的 HTTP 状态代码 (status) 和响应标头 (headers) 的对象。 如果发生错误,则承诺会解析为包含响应的 HTTP 状态代码 (status) 和响应标头 (response.headers) 的对象。

如果发生错误,则可以使用 try/catch 块进行捕获。 例如,如果以下脚本中的请求成功,则脚本会记录状态代码和 x-ratelimit-remaining 标头的值。 如果请求未成功,脚本会记录状态代码、标头的 x-ratelimit-remaining 值和错误消息。

try {
  const result = await octokit.request("GET /repos/{owner}/{repo}/issues", {
    owner: "octocat",
    repo: "Spoon-Knife",
    per_page: 2,
  });

  console.log(`Success! Status: ${result.status}. Rate limit remaining: ${result.headers["x-ratelimit-remaining"]}`)

} catch (error) {
  console.log(`Error! Status: ${error.status}. Rate limit remaining: ${error.headers["x-ratelimit-remaining"]}. Message: ${error.response.data.message}`)
}

若要查看状态代码和标头,请在发送请求时使用 --include--i 标志。

例如,以下请求:

curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues?per_page=2" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" \
--include

返回响应代码和标头,如下所示:

HTTP/2 200
server: GitHub.com
date: Thu, 04 Aug 2022 20:07:51 GMT
content-type: application/json; charset=utf-8
cache-control: public, max-age=60, s-maxage=60
vary: Accept, Accept-Encoding, Accept, X-Requested-With
etag: W/"7fceb7e8c958d3ec4d02524b042578dcc7b282192e6c939070f4a70390962e18"
x-github-media-type: github.v3; format=json
link: <https://api.github.com/repositories/1300192/issues?per_page=2&sort=updated&direction=asc&page=2>; rel="next", <https://api.github.com/repositories/1300192/issues?per_page=2&sort=updated&direction=asc&page=7409>; rel="last"
access-control-expose-headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset
access-control-allow-origin: *
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'
x-ratelimit-limit: 15000
x-ratelimit-remaining: 14996
x-ratelimit-reset: 1659645535
x-ratelimit-resource: core
x-ratelimit-used: 4
accept-ranges: bytes
content-length: 4936
x-github-request-id: 14E0:4BC6:F1B8BA:208E317:62EC2715

在此示例中,响应代码为 200,指示请求成功。

关于响应正文

许多操作会返回响应正文。 除非另外指定,否则响应正文会采用 JSON 格式。 例如,此请求返回问题列表以及有关每个问题的数据:

gh api --header 'Accept: application/vnd.github+json' --method GET /repos/octocat/Spoon-Knife/issues -F per_page=2
await octokit.request("GET /repos/{owner}/{repo}/issues", {
  owner: "octocat",
  repo: "Spoon-Knife",
  per_page: 2,
});
curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues?per_page=2" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN"

与指定所需信息的 GraphQL API 不同,REST API 通常会返回比所需信息更多的信息。 如果需要,可以分析响应以拉取特定信息片段。

例如,可使用 > 将响应重定向到文件:

gh api --header 'Accept: application/vnd.github+json' --method GET /repos/octocat/Spoon-Knife/issues -F per_page=2 > data.json

然后可以使用 jq 获取每个问题的标题和创建者 ID:

jq '.[] | {title: .title, authorID: .user.id}' data.json

前面两个命令返回类似于下面这样的内容:

{
  "title": "Update index.html",
  "authorID": 10701255
}
{
  "title": "Edit index file",
  "authorID": 53709285
}

有关 jq 的详细信息,请参阅 jq 文档

例如,可以获取每个问题的标题和创建者 ID:

try {
  const result = await octokit.request("GET /repos/{owner}/{repo}/issues", {
    owner: "octocat",
    repo: "Spoon-Knife",
    per_page: 2,
  });

  const titleAndAuthor = result.data.map(issue => {title: issue.title, authorID: issue.user.id})

  console.log(titleAndAuthor)

} catch (error) {
  console.log(`Error! Status: ${error.status}. Message: ${error.response.data.message}`)
}

例如,可使用 > 将响应重定向到文件:

curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues?per_page=2" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN" > data.json

然后可以使用 jq 获取每个问题的标题和创建者 ID:

jq '.[] | {title: .title, authorID: .user.id}' data.json

前面两个命令返回类似于下面这样的内容:

{
  "title": "Update index.html",
  "authorID": 10701255
}
{
  "title": "Edit index file",
  "authorID": 53709285
}

有关 jq 的详细信息,请参阅 jq 文档

后续步骤

本文演示了如何在存储库中列出和创建问题。 有关更多做法,请尝试对问题添加注释、编辑问题的标题或关闭问题。 若需详细了解这些操作,请参阅“问题”和“问题”。

有关可以使用的操作的详细信息,请参阅 REST 参考文档