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 について詳しくは、「GitHub の REST API と GraphQL API の比較」をご覧ください。

要求を行う

要求を行うには、まず HTTP メソッドと、使用する操作のパスを見つけます。 たとえば、"Octocat の取得" 操作では、GET メソッドと /octocat パスが使用されます。 この操作の完全なリファレンス ドキュメントについては、「Meta」をご覧ください。

: GitHub CLI の例のコマンドを使用するには、GitHub CLI をインストールする必要があります。 インストールの手順については、GitHub CLI リポジトリを参照してください。

まだ GitHub CLI に対して認証されていない場合は、要求を行う前に gh auth login サブコマンドを使用して認証する必要があります。 詳しくは、「認証」を参照してください。

GitHub CLI を使用して要求を行うには、パスと共に api サブコマンドを使用します。 メソッドを指定するには、--method または -X フラグを使用します。

gh api /octocat --method GET

: JavaScript の例で使用されている Octokit.js ライブラリを使うには、octokit をインストールしてインポートする必要があります。 詳しくは、Octokit.js の README を参照してください。

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 プロジェクトのダウンロードに関するページを参照してください。

認証、パラメーターの送信、応答の使用方法について学習する場合は、引き続きお読みください。

認証

多くの操作では、認証が必要であるか、認証されている場合は追加情報が返されます。 また、認証されると、1 時間あたりにさらに多くの要求を行うことができます。

一部の REST API 操作には認証なしでアクセスできますが、api サブコマンドを使用するには、GitHub CLI に対して認証を行う必要があります。

トークンについて

トークンを追加することで、要求を認証できます。

個人用に GitHub REST API を使用する場合は、personal access tokenを作成できます。 この記事で使用する REST API 操作には、personal access tokens (classic) の repo スコープ、または特に明記されていない限り、fine-grained personal access tokenのパブリック リポジトリへの読み取り専用アクセスが必要です。 その他の操作には、異なるスコープまたはアクセス許可が必要です。 personal access tokenの作成について詳しくは、「個人用アクセス トークンを管理する」をご覧ください。

Organization または他のユーザーの代わりに API を使用する場合、GitHub では、GitHub App の使用が推奨されます。 操作が GitHub Apps で使用できる場合、その操作の REST リファレンス ドキュメントには "GitHub Apps で動作する" と示されます。 この記事で使用される REST API 操作には、GitHub Apps の issues の読み取りおよび書き込みアクセス許可が必要です。 その他の操作では、異なるアクセス許可が必要な場合があります。 詳しくは、「GitHub App の登録」、「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 でスクリプトを実行することもできます。 詳細については、「Codespaces のシークレットを管理する」を参照してください。

これらのオプションを使用できない場合は、別の CLI サービスを使用してトークンを安全に格納することを検討してください。

Octokit.js ライブラリで認証するには、Octokit のインスタンスの作成時にトークンを渡すことができます。 YOUR-TOKEN をお使いのトークンに置き換えます。

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

警告: アクセス トークンはパスワードと同様に扱ってください。

アカウントを安全な状態に保てるように、curl コマンドの代わりに GitHub CLI を使用できます。 認証は GitHub CLI によって自動的に処理されます。 詳しくは、このページの GitHub CLI バージョンを参照してください。

また、トークンを Codespaces シークレットとして格納し、Codespaces を介してコマンド ラインを使用することもできます。 詳細については、「Codespaces のシークレットを管理する」を参照してください。

これらのオプションを使用できない場合は、別の CLI サービスを使用してトークンを安全に格納することを検討してください。

curl コマンドでは、トークンを含む Authorization ヘッダーを送信します。 YOUR-TOKEN は実際のトークンに置き換えてください。

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

注: ほとんどの場合は、Authorization: Bearer または Authorization: token を使用してトークンを渡すことができます。 ただし、JSON Web トークン (JWT) を渡す場合は、Authorization: Bearer を使用する必要があります。

GitHub Actions の認証例

run キーワードを使用して、GitHub Actions ワークフローで GitHub CLI コマンドを実行することもできます。 詳しくは、「ギットハブ アクション のワークフロー構文」を参照してください。

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

run キーワードを使用して、GitHub Actions ワークフローで JavaScript スクリプトを実行することもできます。 詳しくは、「ギットハブ アクション のワークフロー構文」を参照してください。

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', {})

run キーワードを使用して、GitHub Actions ワークフローで curl コマンドを実行することもできます。 詳しくは、「ギットハブ アクション のワークフロー構文」を参照してください。

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+jsonAccept ヘッダーを渡す必要があることを指定します。 他の操作では、別の 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 メソッドに 2 番目の引数として渡されるオブジェクトに request プロパティを追加します。 headers プロパティの値は、キーがヘッダー名で値がヘッダー値のオブジェクトです。 たとえば、値が text/plaincontent-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"

パス パラメーターの使用

パス パラメーターでは操作パスを変更します。 たとえば、"リポジトリの issue の一覧表示" パスは /repos/{owner}/{repo}/issues となります。 中かっこ {} は、指定する必要があるパス パラメーターを示します。 この場合は、リポジトリの所有者と名前を指定する必要があります。 この操作のリファレンス ドキュメントについては、「issue」をご覧ください。

octocat/Spoon-Knife リポジトリから issue を取得するには、{owner}octocatに、{repo}Spoon-Knife に置き換えます。

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

Octokit.js で要求を行うと、パス パラメーターを含むすべてのパラメーターが、request メソッドの 2 番目の引数としてオブジェクトで渡されます。 octocat/Spoon-Knife リポジトリから issue を取得するには、owneroctocat として、repoSpoon-Knife として指定します。

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

octocat/Spoon-Knife リポジトリから issue を取得するには、{owner}octocatに、{repo}Spoon-Knife に置き換えます。 完全なパスを構築するには、GitHub REST API のベース URL https://api.github.com を先頭に付加します (https://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"

この操作では、issue のリストと各 issue に関するデータが返されます。 応答の使用について詳しくは、「応答の使用」セクションを参照してください。

クエリ パラメーターの使用

クエリ パラメーターを使用すると、要求に対して返されるデータを制御できます。 たとえば、クエリ パラメーターを使用すると、応答のページ分割時に返される項目の数を指定できます。

既定では、"リポジトリの issue の一覧表示" 操作で 30 個の issue が返され、作成日の降順で並べ替えられます。 per_page パラメーターを使用すると、30 個ではなく 2 個の issue を返すことができます。 sort パラメーターを使用すると、作成日ではなく、最終更新日で issue を並べ替えることができます。 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

一部の操作では、配列のクエリ パラメーターが使われます。 クエリ文字列で配列を送信するには、配列の項目ごとに 1 回クエリ パラメーターを使い、クエリ パラメーター名の後に [] を追加します。 たとえば、2 つのリポジトリ 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 メソッドの 2 番目の引数としてオブジェクトで渡されます。

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"

一部の操作では、配列のクエリ パラメーターが使われます。 クエリ文字列で配列を送信するには、配列の項目ごとに 1 回クエリ パラメーターを使い、クエリ パラメーター名の後に [] を追加します。 たとえば、2 つのリポジトリ ID の配列を指定するには、?repository_ids[]=REPOSITORY_A_ID&repository_ids[]=REPOSITORY_B_ID を使います。

この操作では、issue のリストと各 issue に関するデータが返されます。 応答の使用について詳しくは、「応答の使用」セクションを参照してください。

本文パラメーターの使用

本文パラメーターを使用すると、API に追加のデータを渡すことができます。 たとえば、"issue の作成" 操作では、新しい issue のタイトルを指定する必要があります。 また、issue 本文に配置するテキストなど、他の情報を指定することもできます。 この操作の完全なリファレンス ドキュメントについては、「issue」をご覧ください。

"issue の作成" 操作では、上記の例の "リポジトリの issue の一覧表示" 操作と同じパスが使用されますが、GET メソッドではなく POST メソッドが使用されます。

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 を、自分が所有している、または自分がメンバーである Organization によって所有されているリポジトリに置き換える必要があります。 お使いのトークンは、リポジトリにアクセスできる必要があり、リポジトリの issue に対する読み取りと書き込みのアクセス許可が必要です。 リポジトリの作成について詳しくは、「リポジトリを作成する」をご覧ください。 fine-grained personal access token へのアクセスとアクセス許可の付与について詳しくは、「個人用アクセス トークンを管理する」をご覧ください。

Octokit.js で要求を行うと、本文パラメーターを含むすべてのパラメーターが、request メソッドの 2 番目の引数としてオブジェクトで渡されます。

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 を、自分が所有している、または自分がメンバーである Organization によって所有されているリポジトリに置き換える必要があります。 お使いのトークンは、リポジトリにアクセスできる必要があり、リポジトリの issue に対する読み取りと書き込みのアクセス許可が必要です。 リポジトリの作成について詳しくは、「リポジトリを作成する」をご覧ください。 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"
}'

この操作によって issue が作成され、新しい issue に関するデータが返されます。 応答で、issue の html_url を見つけ、ブラウザーでその issue に移動します。 応答の使用について詳しくは、「応答の使用」セクションを参照してください。

応答の使用

応答コードとヘッダーについて

すべての要求で、応答の成功を示す 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 メソッドでは promise が返されます。 要求が成功した場合、promise は、応答のHTTP 状態コード (status) と応答ヘッダー (headers) を含むオブジェクトに解決されます。 エラーが発生した場合、promise は、応答の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 形式となります。 たとえば、この要求では、各 issue に関するデータと共に issue のリストが返されます。

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 を使用して、各 issue のタイトルと作成者 ID を取得できます。

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

前の 2 つのコマンドでは次のようなものが返されます。

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

jq について詳しくは、jq のドキュメントをご覧ください。

たとえば、各 issue のタイトルと作成者 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 を使用して、各 issue のタイトルと作成者 ID を取得できます。

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

前の 2 つのコマンドでは次のようなものが返されます。

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

jq について詳しくは、jq のドキュメントをご覧ください。

次の手順

この記事では、リポジトリの issue を一覧表示して作成する方法について説明しました。 さらに練習する場合は、issue にコメントを付けたり、issue のタイトルを編集したり、issue を閉じてみたりしてください。 これらの操作について詳しくは、「issue」と「issue」をご覧ください。

使用できる操作について詳しくは、REST リファレンス ドキュメントを参照してください。