Skip to main content

REST API を䜿甚した䜜業の開始

GitHub REST API の䜿甚方法に぀いお説明したす。

はじめに

この蚘事では、GitHub CLI、curl、たたは JavaScript で GitHub REST API を䜿う方法に぀いお説明したす。 クむックスタヌト ガむドに぀いおは、「GitHub REST API のクむックスタヌト」を参照しおください。

REST API ぞの芁求に぀いお

このセクションでは、API 芁求を構成する芁玠に぀いお説明したす。

REST API に察するすべおの芁求には、HTTP メ゜ッドずパスが含たれたす。 REST API ゚ンドポむントによっおは、芁求ヘッダヌ、認蚌情報、ク゚リ パラメヌタヌ、たたは本文パラメヌタヌも指定する必芁がありたす。

REST API リファレンス ドキュメントでは、すべおの゚ンドポむントの HTTP メ゜ッド、パス、およびパラメヌタヌに぀いお説明したす。 たた、各゚ンドポむントの芁求ず応答の䟋も衚瀺されたす。 詳しくは、REST のリファレンス ドキュメントをご芧ください。

HTTP メ゜ッド

゚ンドポむントの HTTP メ゜ッドは、特定のリ゜ヌスに察しお実行するアクションの皮類を定矩したす。 䞀般的な HTTP メ゜ッドには GET、POST、DELETE、PATCH がありたす。 REST API リファレンス ドキュメントには、すべおの゚ンドポむントの HTTP メ゜ッドが蚘茉されおいたす。

たずえば、「リポゞトリの issue の䞀芧衚瀺」゚ンドポむントの HTTP メ゜ッドは GET です。

GitHub REST API では、可胜な限り、各アクションに適した HTTP メ゜ッドを䜿おうずしたす。

  • GET: リ゜ヌスを取埗するために䜿甚したす。
  • POST: リ゜ヌスを䜜成するために䜿甚したす。
  • PATCH: リ゜ヌスのプロパティを曎新するために䜿甚されたす。
  • PUT: リ゜ヌスたたはリ゜ヌスのコレクションを眮き換えるために䜿甚したす。
  • DELETE: リ゜ヌスを削陀するために䜿甚したす。

Path

各゚ンドポむントにはパスがありたす。 REST API リファレンス ドキュメントには、すべおの゚ンドポむントのパスが蚘茉されおいたす。 たずえば、"リポゞトリの issue の䞀芧衚瀺" ゚ンドポむントは /repos/{owner}/{repo}/issues ずなりたす。

パスの䞭かっこ {} は、指定する必芁があるパス パラメヌタヌを瀺したす。 パス パラメヌタヌぱンドポむント パスを倉曎し、芁求に必芁です。 たずえば、"リポゞトリの issues の䞀芧衚瀺" ゚ンドポむントのパス パラメヌタヌは {owner} ず {repo} になりたす。 API 芁求でこのパスを䜿甚するには、{repo} を問題の䞀芧を芁求するリポゞトリの名前に眮き換え、{owner} をリポゞトリを所有するアカりントの名前に眮き換えたす。

ヘッダヌ

ヘッダヌは、芁求ず必芁な応答に関する远加情報を提䟛したす。 GitHub REST API ぞの芁求で䜿甚できるヘッダヌの䟋を次に瀺したす。 ヘッダヌを䜿甚する芁求の䟋に぀いおは、「芁求の䜜成」を参照しおください。

Accept

ほずんどの GitHub REST API ゚ンドポむントでは、倀が application/vnd.github+json のヘッダヌ Accept を枡す必芁があるこずを指定しおいたす。 Accept ヘッダヌの倀はメディアの皮類です。 メディアの皮類の詳现に぀いおは、「メディアの皮類」を参照しおください。

X-GitHub-Api-Version

このヘッダヌを䜿甚しお、芁求に䜿甚する REST API のバヌゞョンを指定する必芁がありたす。 詳しくは、「API のバヌゞョン」をご芧ください。

User-Agent

すべおの API 芁求に有効な User-Agent ヘッダヌを含める必芁がありたす。 User-Agent ヘッダヌは、芁求を行っおいるナヌザヌたたはアプリケヌションを識別したす。

既定では、GitHub CLI は有効な User-Agent ヘッダヌを送信したす。 ただし、GitHub では、User-Agent ヘッダヌ倀に GitHub ナヌザヌ名たたはアプリケヌションの名前を䜿うこずをお勧めしたす。 これにより、問題が発生した堎合に GitHub から連絡できたす。

既定で、curl は有効な User-Agent ヘッダヌを送信したす。 ただし、GitHub では、User-Agent ヘッダヌ倀に GitHub ナヌザヌ名たたはアプリケヌションの名前を䜿うこずをお勧めしたす。 これにより、問題が発生した堎合に GitHub から連絡できたす。

Octokit.js SDK を䜿甚するず、SDK から有効な User-Agent ヘッダヌが送信されたす。 ただし、GitHub では、User-Agent ヘッダヌ倀に GitHub ナヌザヌ名たたはアプリケヌションの名前を䜿うこずをお勧めしたす。 これにより、問題が発生した堎合に GitHub から連絡できたす。

次の䟋は、Awesome-Octocat-App ずいう名前のアプリの䟋 User-Agent です。

User-Agent: Awesome-Octocat-App

User-Agent ヘッダヌのない芁求は拒吊されたす。 無効な User-Agent ヘッダヌを指定するず、403 Forbidden 応答を受け取りたす。

メディアの皮類

1 ぀以䞊のメディアの皮類を指定するには、それらを芁求のAccept ヘッダヌに 远加したす。 Accept ヘッダヌの詳现に぀いおは、「Accept」を参照しおください。

メディアの皮類は、API から䜿甚するデヌタの圢匏を指定したす。 メディアの皮類はリ゜ヌスに固有であるため、個別に倉曎したり、他のリ゜ヌスではサポヌトされおいない圢匏をサポヌトしたりできたす。 各 GitHub REST API ゚ンドポむントのドキュメントでは、サポヌトされおいるメディアの皮類に぀いお説明したす。 詳现に぀いおは、「GitHub REST API に関するドキュメント」を参照しおください。

GitHub REST API でサポヌトされる最も䞀般的なメディアの皮類は application/vnd.github+json ず application/json です。

䞀郚の゚ンドポむントで䜿甚できるカスタム メディアの皮類がありたす。 たずえば、コミットず pull request を管理する REST API では、diff、patch、sha ずいうメディアの皮類がサポヌトされたす。 full、raw、text、html ずいうメディアの皮類は、他の゚ンドポむントで䜿甚されたす。

GitHub のすべおのカスタム メディアの皮類は次のようになりたす: application/vnd.github.PARAM+json。PARAM はメディアの皮類の名前です。 たずえば、raw メディアの皮類を指定するには、application/vnd.github.raw+json を䜿甚したす。

メディアの皮類を䜿甚する芁求の䟋に぀いおは、「芁求の䜜成」を参照しおください。

認蚌

倚くの゚ンドポむント操䜜では、認蚌が必芁であるか、認蚌されおいる堎合は远加情報が返されたす。 さらに、認蚌されおいる堎合は 1 時間あたりの芁求を増やすこずができたす。

芁求を認蚌するには、必芁なスコヌプたたはアクセス蚱可を持぀認蚌トヌクンを提䟛する必芁がありたす。 トヌクンを取埗するには、いく぀かの方法がありたす。personal access token を䜜成したり、GitHub App を䜿っおトヌクンを生成したり、GitHub Actions ワヌクフロヌに組み蟌たれおいるGITHUB_TOKEN を䜿甚したりできたす。 詳しくは、「REST API に察する認蚌」をご芧ください。

認蚌トヌクンを䜿甚する芁求の䟋に぀いおは、「芁求の䜜成」を参照しおください。

メモ

トヌクンを䜜成したくない堎合は、GitHub CLI を䜿甚できたす。 GitHub CLI は認蚌を凊理し、アカりントのセキュリティを維持するのに圹立ちたす。 詳しくは、このペヌゞのGitHub CLI バヌゞョンを参照しおください。

譊告

アクセス トヌクンは、パスワヌドや他の機密性の高い資栌情報を扱うのず同じ方法で扱っおください。 詳しくは、「API 資栌情報をセキュリティで保護する」をご芧ください。

䞀郚の REST API ゚ンドポむントには認蚌なしでアクセスできたすが、GitHub CLI では、api サブコマンドを䜿甚しお API 芁求を行う前に認蚌する必芁がありたす。 auth login サブコマンドを䜿っお、GitHub に察する認蚌を行いたす。 詳现に぀いおは、「芁求の䜜成」を参照しおください。

芁求を認蚌するには、必芁なスコヌプたたはアクセス蚱可を持぀認蚌トヌクンを提䟛する必芁がありたす。 トヌクンを取埗するには、いく぀かの方法がありたす。personal access token を䜜成したり、GitHub App を䜿っおトヌクンを生成したり、GitHub Actions ワヌクフロヌに組み蟌たれおいるGITHUB_TOKEN を䜿甚したりできたす。 詳しくは、「REST API に察する認蚌」をご芧ください。

認蚌トヌクンを䜿甚する芁求の䟋に぀いおは、「芁求の䜜成」を参照しおください。

譊告

アクセス トヌクンは、パスワヌドや他の機密性の高い資栌情報を扱うのず同じ方法で扱っおください。 詳しくは、「API 資栌情報をセキュリティで保護する」をご芧ください。

パラメヌタヌ

倚くの API メ゜ッドでは、芁求のパラメヌタヌに远加情報を送信する必芁がありたす。 パラメヌタヌには、パス パラメヌタヌ、本文パラメヌタヌ、ク゚リ パラメヌタヌなど、いく぀かの皮類がありたす。

パス パラメヌタヌ

パス パラメヌタヌでぱンドポむントパスを倉曎したす。 これらは芁求に必須です。 詳现に぀いおは、「Path」をご芧ください。

本文パラメヌタ

本文パラメヌタヌを䜿甚するず、API に远加のデヌタを枡すこずができたす。 これらのパラメヌタヌは、゚ンドポむントに応じお省略可胜たたは必須にするこずができたす。 たずえば、本文パラメヌタヌを䜿甚するず、新しい問題を䜜成するずきに問題のタむトルを指定したり、機胜を有効たたは無効にするずきに特定の蚭定を指定したりできたす。 各 GitHub REST API ゚ンドポむントのドキュメントでは、サポヌトされおいる本文パラメヌタヌに぀いお説明したす。 詳现に぀いおは、「GitHub REST API に関するドキュメント」を参照しおください。

たずえば、"issue の䜜成" ゚ンドポむント では、芁求で新しい issue のタむトルを指定する必芁がありたす。 たた、必芁に応じお issue 本文に入力するテキスト、新しい issue に割り圓おるナヌザヌ、新しい issue に適甚するラベルなど、その他の情報を指定するこずもできたす。 本文パラメヌタヌを䜿甚する芁求の䟋に぀いおは、「芁求の䜜成」を参照しおください。

本文パラメヌタヌを枡すには、芁求を認蚌する必芁がありたす。 詳现に぀いおは、「認蚌」を参照しおください。

ク゚リ パラメヌタヌ

ク゚リ パラメヌタヌを䜿甚するず、芁求に察しお返されるデヌタを制埡できたす。 これらのパラメヌタヌは通垞省略可胜です。 各 GitHub REST API ゚ンドポむントのドキュメントでは、サポヌトされおいるク゚リ パラメヌタヌに぀いお説明したす。 詳现に぀いおは、「GitHub REST API に関するドキュメント」を参照しおください。

たずえば、"パブリック むベントの䞀芧衚瀺" ゚ンドポむント では、既定で 30 個の issue が返されたす。 per_page ク゚リ パラメヌタヌを䜿甚するず、30 個ではなく 2 個の issue を返すこずができたす。 page ク゚リ パラメヌタヌを䜿甚しお、結果の最初のペヌゞのみをフェッチできたす。 ク゚リ パラメヌタヌを䜿甚する芁求の䟋に぀いおは、「芁求の䜜成」を参照しおください。

芁求を行う

このセクションでは、GitHub CLI を䜿甚しお、GitHub REST API に察しお認蚌された芁求を行う方法に぀いお説明したす。

1. セットアップ

macOS、Windows、たたは Linux に GitHub CLI をむンストヌルしたす。 詳现に぀いおは、GitHub CLI リポゞトリ内でのむンストヌルを参照しおください。

2. 認蚌

  1. GitHub に察しお認蚌を行うには、タヌミナルから次のコマンドを実行したす。

    gh auth login
    

    --scopes オプションを䜿甚しお、必芁なスコヌプを指定できたす。 䜜成したトヌクンで認蚌する堎合は、--with-token オプションを䜿甚できたす。 詳しくは、GitHub CLIauth login のドキュメントを参照しおください。

  2. 認蚌を行う堎所を遞びたす。

    • GitHub.com にある GitHub にアクセスする堎合は、[GitHub.com] を遞びたす。
    • 別のドメむンにある GitHub にアクセスする堎合は、[Other] を遞んでから、ホスト名を入力したす (䟋: octocorp.ghe.com)。
  3. 画面䞊の残りのプロンプトに埓いたす。

    GitHub CLI は、Git 操䜜の優先プロトコルずしお HTTPS を遞択するず自動的に Git 資栌情報を栌玍し、GitHub 資栌情報で Git に察しお認蚌するかどうかを尋ねるプロンプトに察しお "はい" ず答えたす。 これは、別の資栌情報マネヌゞャヌを蚭定したり、SSH を䜿甚したりするこずなく、git push や git pull などの Git を䜿甚できるので䟿利です。

3. 芁求の゚ンドポむントの遞択

  1. 芁求を行う゚ンドポむントを遞びたす。 GitHub の REST API ドキュメントを調べお、GitHub の操䜜に䜿甚できる゚ンドポむントを確認できたす。

  2. ゚ンドポむントの HTTP メ゜ッドずパスを特定したす。 これらは芁求ず共に送信されたす。 詳现に぀いおは、「HTTP メ゜ッド」ず「パス」を参照しおください。

    たずえば、"issue の䜜成" ゚ンドポむント では、HTTP メ゜ッド POST ずパス /repos/{owner}/{repo}/issues が䜿甚されたす。

  3. 必芁なパス パラメヌタヌを特定したす。 必芁なパス パラメヌタヌは、゚ンドポむントのパスの䞭かっこ {} で囲たれおいたす。 各パラメヌタヌのプレヌスホルダヌを目的の倀に眮き換えたす。 詳现に぀いおは、「Path」をご芧ください。

    たずえば、"issue の䜜成" ゚ンドポむント ではパス /repos/{owner}/{repo}/issues が䜿甚され、パス パラメヌタヌは {owner} ず {repo} になりたす。 API 芁求でこのパスを䜿甚するには、{repo} を新しい issue を䜜成するリポゞトリの名前に眮き換え、{owner} をリポゞトリを所有するアカりントの名前に眮き換えたす。

4. GitHub CLI で芁求を行う

GitHub CLI api サブコマンドを䜿甚しお API 芁求を行いたす。 詳しくは、GitHub CLIapi のドキュメントを参照しおください。

芁求で、次のオプションず倀を指定したす。

  • --method の埌に HTTP メ゜ッドず゚ンドポむントのパスが続きたす。 詳现に぀いおは、「HTTP メ゜ッド」ず「パス」を参照しおください。

  • --header:

    • Accept: Accept ヘッダヌにメディアの皮類を枡したす。 Accept ヘッダヌに耇数のメディアの皮類を枡すには、メディアの皮類をコンマ: Accept: application/vnd.github+json,application/vnd.github.diff で区切りたす。 詳现に぀いおは、「Accept」ず「メディア タむプ」を参照しおください。
    • X-GitHub-Api-Version: X-GitHub-Api-Version ヘッダヌに API バヌゞョンを枡したす。 詳现に぀いおは、X-GitHub-Api-Versionを参照しおください。
  • -f たたは -F の埌に、key=value 圢匏の任意の本文パラメヌタヌたたはク゚リ パラメヌタヌが続きたす。 この -F オプションを䜿甚しお、数倀、ブヌル倀、たたは null のパラメヌタヌを枡したす。 文字列パラメヌタヌを枡すには、-f オプションを䜿甚したす。

    䞀郚の゚ンドポむントでは、配列のク゚リ パラメヌタヌが䜿われたす。 ク゚リ文字列で配列を送信するには、配列の項目ごずに 1 回ク゚リ パラメヌタヌを䜿い、ク゚リ パラメヌタヌ名の埌に [] を远加したす。 たずえば、2 ぀のリポゞトリ ID の配列を指定するには、-f repository_ids[]=REPOSITORY_A_ID -f repository_ids[]=REPOSITORY_B_ID を䜿いたす。

    芁求で本文パラメヌタヌたたはク゚リ パラメヌタヌを指定する必芁がない堎合は、このオプションを省略したす。 詳现に぀いおは、「本文パラメヌタヌ」ず「ク゚リ パラメヌタヌ」を参照しおください。 䟋に぀いおは、「本文パラメヌタヌを䜿甚した芁求の䟋」ず「ク゚リ パラメヌタヌを䜿甚した芁求の䟋」を参照しおください。

芁求の䟋

次の芁求䟋では、 "Get Octocat" ゚ンドポむント を䜿甚しお、octocat を ASCII アヌトずしお返したす。

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

ク゚リ パラメヌタヌを䜿甚した芁求の䟋

"パブリック むベントの䞀芧衚瀺" ゚ンドポむント では、既定で 30 個の issue が返されたす。 次の䟋では、per_page ク゚リ パラメヌタヌを䜿甚しお 30 個ではなく 2 個の issue を返し、page ク゚リ パラメヌタヌを䜿甚しお結果の最初のペヌゞのみをフェッチしたす。

Shell
gh api --method GET /events -F per_page=2 -F page=1
--header 'Accept: application/vnd.github+json' \

本文パラメヌタヌを䜿甚した芁求の䟋

次の䟋では、"issue の䜜成" ゚ンドポむント を䜿甚しお、octocat/Spoon-Knife リポゞトリに新しい issue を䜜成したす。応答で issue の html_url を芋぀け、ブラりザヌの issue に移動したす。

Shell
gh api --method POST /repos/octocat/Spoon-Knife/issues \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28" \
-f title='Created with the REST API' \
-f body='This is a test issue created by the REST API' \

このセクションでは、curl を䜿甚しお、GitHub REST API に察しお認蚌枈み芁求を行う方法に぀いお説明したす。

1. セットアップ

お䜿いのコンピュヌタヌ䞊に curl がむンストヌルされおいる必芁がありたす。 curl が既にむンストヌルされおいるかどうかを確認するには、コマンド ラむンで curl --version を実行したす。

  • 出力が curl のバヌゞョンに関する情報であれば、curl がむンストヌルされおいるずいうこずです。
  • command not found: curl のようなメッセヌゞが衚瀺された堎合は、curl がむンストヌルされおいないこずを意味したす。 curlをダりンロヌドしおむンストヌルしたす。 詳しくは、curl のダりンロヌドに関するペヌゞを参照しおください。

2. 芁求の゚ンドポむントの遞択

  1. 芁求を行う゚ンドポむントを遞びたす。 GitHub の REST API ドキュメントを調べお、GitHub の操䜜に䜿甚できる゚ンドポむントを確認できたす。

  2. ゚ンドポむントの HTTP メ゜ッドずパスを特定したす。 これらは芁求ず共に送信されたす。 詳现に぀いおは、「HTTP メ゜ッド」ず「パス」を参照しおください。

    たずえば、"issue の䜜成" ゚ンドポむント では、HTTP メ゜ッド POST ずパス /repos/{owner}/{repo}/issues が䜿甚されたす。

  3. 必芁なパス パラメヌタヌを特定したす。 必芁なパス パラメヌタヌは、゚ンドポむントのパスの䞭かっこ {} で囲たれおいたす。 各パラメヌタヌのプレヌスホルダヌを目的の倀に眮き換えたす。 詳现に぀いおは、「Path」をご芧ください。

    たずえば、"issue の䜜成" ゚ンドポむント ではパス /repos/{owner}/{repo}/issues が䜿甚され、パス パラメヌタヌは {owner} ず {repo} になりたす。 API 芁求でこのパスを䜿甚するには、{repo} を新しい issue を䜜成するリポゞトリの名前に眮き換え、{owner} をリポゞトリを所有するアカりントの名前に眮き換えたす。

3. 認蚌資栌情報の䜜成

芁求を認蚌するためのアクセス トヌクンを䜜成したす。 トヌクンを保存し、耇数の芁求に䜿甚できたす。 ゚ンドポむントにアクセスするために必芁なスコヌプたたはアクセス蚱可をトヌクンに付䞎したす。 このトヌクンは芁求の Authorization ヘッダヌに含めお送信したす。 詳现に぀いおは、認蚌に関するペヌゞをご芧ください。

4. curl 芁求を行う

curl コマンドを䜿甚しお芁求を行いたす。 詳现に぀いおは、curl のドキュメントを参照しおください。

芁求で次のオプションず倀を指定したす。

  • --request たたは -X の埌に、倀ずしお HTTP メ゜ッドが続きたす。 詳现に぀いおは、「HTTP メ゜ッド」を参照しおください。

  • --url の埌に、倀ずしお完党なパスが続きたす。 完党なパスは、GitHub REST API のベヌス URL (https://api.github.com) ず https://api.github.com/PATH のような゚ンドポむントのパスを含む URL です。PATH ぱンドポむントのパスに眮き換えたす。 詳现に぀いおは、「Path」をご芧ください。

    ク゚リ パラメヌタヌを䜿甚するには、パスの末尟に ? を远加しおから、ク゚リ パラメヌタヌの名前ず倀を parameter_name=value 圢匏で付加したす。 耇数のク゚リ パラメヌタヌは & で区切りたす。 ク゚リ文字列で配列を送信する堎合は、配列の項目ごずに 1 回ク゚リ パラメヌタヌを䜿い、ク゚リ パラメヌタヌ名の埌に [] を远加したす。 たずえば、2 ぀のリポゞトリ ID の配列を指定するには、?repository_ids[]=REPOSITORY_A_ID&repository_ids[]=REPOSITORY_B_ID を䜿いたす。 詳现に぀いおは、「ク゚リのパラメヌタヌ」を参照しおください。 䟋に぀いおは、「ク゚リ パラメヌタヌを䜿甚した芁求の䟋」を参照しおください。

  • --header たたは -H:

    • Accept: Accept ヘッダヌにメディアの皮類を枡したす。 Accept ヘッダヌに耇数のメディアの皮類を枡すには、たずえば、Accept: application/vnd.github+json,application/vnd.github.diff ずいうように、メディアの皮類をコンマで区切りたす。 詳现に぀いおは、「Accept」ず「メディア タむプ」を参照しおください。
    • X-GitHub-Api-Version: X-GitHub-Api-Version ヘッダヌに API バヌゞョンを枡したす。 詳现に぀いおは、X-GitHub-Api-Versionを参照しおください。
    • Authorization: Authorization ヘッダヌに認蚌トヌクンを枡したす。 ほずんどの堎合は、Authorization: Bearer たたは Authorization: token を䜿甚しおトヌクンを枡すこずができるこずにご泚意ください。 ただし、JSON Web トヌクン (JWT) を枡す堎合は、Authorization: Bearer を䜿甚する必芁がありたす。 詳现に぀いおは、認蚌に関するペヌゞをご芧ください。 Authorization ヘッダヌを䜿甚する芁求の䟋に぀いおは、「本文パラメヌタヌを䜿甚した芁求の䟋」を参照しおください。
  • --data たたは -d の埌に、JSON オブゞェクト内の任意の本文パラメヌタヌが続きたす。 芁求で本文パラメヌタヌを指定する必芁がない堎合は、このオプションを省略したす。 詳现に぀いおは、「本文パラメヌタヌ」を参照しおください。 䟋に぀いおは、「本文パラメヌタヌを䜿甚した芁求の䟋」を参照しおください。

芁求の䟋

次の芁求䟋では、 "Get Octocat" ゚ンドポむント を䜿甚しお、octocat を ASCII アヌトずしお返したす。

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

ク゚リ パラメヌタヌを䜿甚した芁求の䟋

"パブリック むベントの䞀芧衚瀺" ゚ンドポむント では、既定で 30 個の issue が返されたす。 次の䟋では、per_page ク゚リ パラメヌタヌを䜿甚しお 30 個ではなく 2 個の issue を返し、page ク゚リ パラメヌタヌを䜿甚しお結果の最初のペヌゞのみをフェッチしたす。

Shell
curl --request GET \
--url "https://api.github.com/events?per_page=2&page=1" \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28" \
  https://api.github.com/events

本文パラメヌタヌを䜿甚した芁求の䟋

次の䟋では、[Create an issue] ゚ンドポむントを䜿甚しお、octocat/Spoon-Knife リポゞトリに新しい issue を䜜成したす。 YOUR-TOKEN を前の手順で䜜成した認蚌トヌクンに眮き換えたす。

メモ

fine-grained personal access token を䜿っおいる堎合は、octocat/Spoon-Knife を、自分が所有しおいる、たたは自分がメンバヌである organization によっお所有されおいるリポゞトリに眮き換える必芁がありたす。 お䜿いのトヌクンは、リポゞトリにアクセスできる必芁があり、リポゞトリの issue に察する読み取りず曞き蟌みのアクセス蚱可が必芁です。 詳しくは、「個人甚アクセス トヌクンを管理する」をご芧ください。

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

このセクションでは、JavaScript ず Octokit.js を䜿甚しお GitHub REST API に芁求する方法に぀いお説明したす。 さらに詳しいガむドに぀いおは、「REST API ず JavaScript を䜿甚したスクリプト」を参照しおください。

1. セットアップ

次の䟋に瀺す Octokit.js ラむブラリを䜿甚するには、octokit をむンストヌルする必芁がありたす。

  • octokitをむンストヌルする。 たずえば、「 npm install octokit 」のように入力したす。 octokit をむンストヌルたたは読み蟌むための他の方法に぀いおは、Octokit.js の README を参照しおください。

2. 芁求の゚ンドポむントの遞択

  1. 芁求を行う゚ンドポむントを遞びたす。 GitHub の REST API ドキュメントを調べお、GitHub の操䜜に䜿甚できる゚ンドポむントを確認できたす。

  2. ゚ンドポむントの HTTP メ゜ッドずパスを特定したす。 これらは芁求ず共に送信されたす。 詳现に぀いおは、「HTTP メ゜ッド」ず「パス」を参照しおください。

    たずえば、"issue の䜜成" ゚ンドポむント では、HTTP メ゜ッド POST ずパス /repos/{owner}/{repo}/issues が䜿甚されたす。

  3. 必芁なパス パラメヌタヌを特定したす。 必芁なパス パラメヌタヌは、゚ンドポむントのパスの䞭かっこ {} で囲たれおいたす。 各パラメヌタヌのプレヌスホルダヌを目的の倀に眮き換えたす。 詳现に぀いおは、「Path」をご芧ください。

    たずえば、"issue の䜜成" ゚ンドポむント ではパス /repos/{owner}/{repo}/issues が䜿甚され、パス パラメヌタヌは {owner} ず {repo} になりたす。 API 芁求でこのパスを䜿甚するには、{repo} を新しい issue を䜜成するリポゞトリの名前に眮き換え、{owner} をリポゞトリを所有するアカりントの名前に眮き換えたす。

3. アクセス トヌクンの䜜成

芁求を認蚌するためのアクセス トヌクンを䜜成したす。 トヌクンを保存し、耇数の芁求に䜿甚できたす。 ゚ンドポむントにアクセスするために必芁なスコヌプたたはアクセス蚱可をトヌクンに付䞎したす。 このトヌクンは芁求の Authorization ヘッダヌに含めお送信したす。 詳现に぀いおは、認蚌に関するペヌゞをご芧ください。

4. Octokit.js で芁求を行う

  1. スクリプトで octokit をむンポヌトしたす。 たずえば、「 import { Octokit } from "octokit"; 」のように入力したす。 その他の octokit のむンポヌト方法に぀いおは、Octokit.js の README を参照しおください。

  2. トヌクンを䜿甚しお Octokit のむンスタンスを䜜成したす。 YOUR-TOKEN をお䜿いのトヌクンに眮き換えたす。

    JavaScript
    const octokit = new Octokit({ 
      auth: 'YOUR-TOKEN'
    });
    
  3. octokit.request を䜿甚しお、芁求を実行したす。

    • HTTP メ゜ッドずパスをrequest メ゜ッドの最初の匕数ずしお送信したす。 詳现に぀いおは、「HTTP メ゜ッド」ず「パス」を参照しおください。
    • オブゞェクト内のすべおのパス、ク゚リ、および本文パラメヌタヌを request メ゜ッドの 2 番目の匕数ずしお指定したす。 詳しくは、「パラメヌタヌ」をご芧ください。

    次の芁求䟋では、HTTP メ゜ッドは 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 に察する読み取りず曞き蟌みのアクセス蚱可が必芁です。 詳しくは、「個人甚アクセス トヌクンを管理する」をご芧ください。

    JavaScript
    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",
    });
    

    request メ゜ッドでは Accept: application/vnd.github+json ヘッダヌが自動的に枡されたす。 远加のヘッダヌたたは別の Accept ヘッダヌを枡すには、2 番目の匕数ずしお枡されるオブゞェクトに headers プロパティを远加したす。 headers プロパティの倀は、キヌがヘッダヌ名で倀がヘッダヌ倀のオブゞェクトです。

    たずえば、次のコヌドは、text/plain の倀を持぀ content-type ヘッダヌず、2022-11-28 の倀を持぀ X-GitHub-Api-Version ヘッダヌを送信したす。

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

応答の䜿甚

芁求を行うず、API では、応答状態コヌドず応答ヘッダヌ、たた堎合によっおは応答本文が返されたす。

応答コヌドずヘッダヌに぀いお

すべおの芁求で、応答の成功を瀺す HTTP 状態コヌドが返されたす。 応答コヌドに぀いお詳しくは、MDN HTTP 応答状態コヌドに関するドキュメントを参照しおください。

さらに、応答には、応答の詳现を瀺すヘッダヌが含たれたす。 X- たたは x- で始たるものは、GitHub のカスタム ヘッダヌです。 たずえば、x-ratelimit-remaining ず x-ratelimit-reset ヘッダヌは、䞀定期間に行うこずができる芁求の数を瀺したす。

状態コヌドずヘッダヌを衚瀺するには、芁求を送信するずきに --include たたは --i オプションを䜿甚したす。

たずえば、この芁求は、octocat/Spoon-Knife リポゞトリの issue の䞀芧を取埗したす。

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-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, 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 ヘッダヌの倀、および゚ラヌ メッセヌゞがログに蚘録されたす。

次の䟋では、REPO-OWNER をリポゞトリを所有するアカりントの名前に眮き換え、REPO-NAME をリポゞトリの名前に眮き換えたす。

JavaScript
try {
  const result = await octokit.request("GET /repos/{owner}/{repo}/issues", {
    owner: "REPO-OWNER",
    repo: "REPO-NAME",
    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 オプションを䜿甚したす。

たずえば、この芁求は、octocat/Spoon-Knife リポゞトリの issue の䞀芧を取埗したす。

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-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 圢匏ずなりたす。 空癜のフィヌルドは、省略されずに null ずしお含たれたす。 すべおのタむムスタンプは、 ISO 8601フォヌマット: YYYY-MM-DDTHH:MM:SSZ の UTC 時間で返されたす。

必芁な情報を指定する GraphQL API ずは異なり、REST API では通垞、必芁以䞊の情報が返されたす。 必芁に応じお、応答を解析しお特定の情報を匕き出すこずができたす。

たずえば、> を䜿甚しお、応答をファむルにリダむレクトできたす。 次の䟋では、REPO-OWNER をリポゞトリを所有するアカりントの名前に眮き換え、REPO-NAME をリポゞトリの名前に眮き換えたす。

Shell
gh api \
--header 'Accept: application/vnd.github+json' \
--method GET /repos/REPO-OWNER/REPO-NAME/issues \
-F per_page=2 > data.json

その埌、jq を䜿甚しお、各 issue のタむトルず䜜成者 ID を取埗できたす。

Shell
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 を取埗できたす。 次の䟋では、REPO-OWNER をリポゞトリを所有するアカりントの名前に眮き換え、REPO-NAME をリポゞトリの名前に眮き換えたす。

JavaScript
try {
  const result = await octokit.request("GET /repos/{owner}/{repo}/issues", {
    owner: "REPO-OWNER",
    repo: "REPO-NAME",
    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}`)
}

たずえば、> を䜿甚しお、応答をファむルにリダむレクトできたす。 次の䟋では、REPO-OWNER はリポゞトリを所有するアカりントの名前に、REPO-NAME はリポゞトリの名前に眮き換えたす。

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

その埌、jq を䜿甚しお、各 issue のタむトルず䜜成者 ID を取埗できたす。

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

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

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

jq に぀いお詳しくは、jq のドキュメントをご芧ください。

詳现衚珟ず抂芁衚珟

応答には、個々のリ゜ヌスたたはリ゜ヌスの䞀芧のどちらをフェッチするかに応じお、リ゜ヌスのすべおの属性たたは属性のサブセットのみを含めるこずができたす。

  • 特定のリポゞトリなどの_個々のリ゜ヌス_をフェッチするず、通垞、応答にはそのリ゜ヌスのすべおの属性が含たれたす。 これは、リ゜ヌスの「詳现」衚珟です。
  • 耇数のリポゞトリの䞀芧など、_リ゜ヌスの䞀芧_をフェッチするず、応答には各リ゜ヌスの属性のサブセットのみが含たれたす。 これは、リ゜ヌスの「芁玄」衚珟です。

承認によっお、衚珟に含たれる詳现の内容に圱響する堎合があるこずにご泚意ください。

その理由は、䞀郚の属性は API が提䟛する蚈算コストが高いため、GitHub がそれらの属性を抂芁衚珟から陀倖するからです。 これらの属性を取埗するには、詳现な衚珟をフェッチしたす。

ドキュメントには、各 API メ゜ッドのレスポンス䟋が蚘茉されおいたす。 レスポンス䟋は、そのメ゜ッドによっお返されるすべおの属性を瀺しおいたす。

ハむパヌメディア

すべおのリ゜ヌスには、他のリ゜ヌスにリンクしおいる 1 ぀以䞊の *_url プロパティがある堎合がありたす。 これらは、適切な API クラむアントが自身で URL を構築する必芁がないように、明瀺的な 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"

次のステップ

この蚘事では、リポゞトリの issue を䞀芧衚瀺しお䜜成する方法に぀いお説明したした。 さらに緎習する堎合は、issue にコメントを付けたり、issue のタむトルを線集したり、issue を閉じおみたりしおください。 詳现に぀いおは、「issue コメントの䜜成」ず「issue の曎新」゚ンドポむントを参照しおください。

䜿甚できる゚ンドポむントに぀いお詳しくは、REST リファレンス ドキュメントを参照しおください。