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
경로를 사용합니다. 이 작업에 대한 전체 참조 설명서는 “메타”을(를) 참조하세요.
참고: 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 추가 정보를 참조하세요.
JavaScript를 사용하여 요청을 수행하기 위해 Octokit.js 사용할 수 있습니다. 자세한 내용은 "REST API 및 JavaScript를 사용하여 스크립팅"을 참조하세요.
먼저, Octokit
의 인스턴스를 만듭니다.
const octokit = new Octokit({ });
그런 다음, request
메서드를 사용하여 요청을 수행합니다. HTTP 메서드와 경로를 첫 번째 인수로 전달합니다.
await octokit.request("GET /octocat", {});
GitHub REST API, https://api.github.com
의 기준 URL을 전체 URL을 가져오는 경로 앞에 추가합니다 https://api.github.com/octocat
.
명령줄에서 curl
명령을 사용합니다. --request
또는 -X
플래그를 사용하고 그 뒤에는 HTTP 메서드가 따라옵니다. --url
플래그를 사용하고 그 뒤에는 전체 URL이 따라옵니다.
curl --request GET \
--url "https://api.github.com/octocat"
참고: “command not found: curl”과 유사한 메시지가 표시되면 curl
을 다운로드하여 설치해야 할 수 있습니다. 자세한 내용은 curl 프로젝트 다운로드 페이지를 참조하세요.
계속해서 읽으면 인증하고, 매개 변수를 보내고, 응답을 사용하는 방법을 살펴볼 수 있습니다.
인증
인증된 경우 많은 작업에 인증이 필요하거나 추가 정보를 반환해야 합니다. 또한 인증되면 시간당 더 많은 요청을 수행할 수 있습니다.
api
하위 명령을 사용하려면 GitHub CLI에 인증해야 합니다.토큰 정보
토큰을 추가하여 요청을 인증할 수 있습니다.
개인용으로 GitHub REST API를 사용하려는 경우 personal access token를 만들 수 있습니다. 이 문서에서 사용되는 REST API 작업에는 personal access tokens (classic)에 대한 repo
범위가 필요하거나, 달리 명시되지 않은 한 fine-grained personal access tokens에 대한 퍼블릭 리포지토리에 대한 읽기 전용 액세스가 필요합니다. 다른 작업에는 서로 다른 범위 또는 권한이(가) 필요할 수 있습니다. personal access token을(를) 만드는 방법에 대한 자세한 정보는 "개인용 액세스 토큰 관리"을(를) 참조하세요.
조직 또는 다른 사용자를 대신하여 API를 사용하려는 경우 GitHub에서 GitHub App을(를) 사용하는 것이 좋습니다. GitHub Apps에 작업을 사용할 수 있는 경우 해당 작업에 대한 REST 참조 설명서에 “GitHub 앱에서 작동”이라고 표시됩니다. 이 문서에서 사용되는 REST API 작업에는 GitHub Apps에 대한 issues
읽기 및 쓰기 권한이 필요합니다. 다른 작업에는 다른 사용 권한이 필요할 수 있습니다. 자세한 내용은 "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',
});
경고: 액세스 토큰을 암호와 같이 취급하세요.
계정을 안전하게 유지하기 위해 curl
명령 대신 GitHub CLI를 사용할 수 있습니다. 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: Bearer
또는 Authorization: token
을 사용하여 전달할 수 있습니다. 그러나 JWT(JSON 웹 토큰)를 전달하는 경우 Authorization: Bearer
를 사용해야 합니다.
GitHub Actions에 대한 인증 예제
또한 GitHub Actions 워크플로에서 run
키워드를 사용하여 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
또한 run
키워드를 사용하여GitHub Actions 워크플로에서 JavaScript 스크립트를 실행할 수도 있습니다. 자세한 내용은 "GitHub Actions에 대한 워크플로 구문"을 참조하세요.
GitHub에서는 토큰을 만드는 대신 기본 제공 GITHUB_TOKEN
을 사용하여 인증하는 것이 좋습니다. 가능하지 않은 경우 토큰을 비밀로 저장하고 아래 예제의 GITHUB_TOKEN
을 비밀의 이름으로 바꿉니다. GITHUB_TOKEN
에 대한 자세한 정보는 "자동 토큰 인증"을(를) 참조하세요. 비밀에 대한 자세한 정보는 "GitHub Actions에서 비밀 사용"을(를) 참조하세요.
다음 예제 워크플로:
- 리포지토리 콘텐츠 체크 아웃
- Node.js 설정
octokit
를 설치합니다.GITHUB_TOKEN
의 값을TOKEN
이라는 환경 변수로 저장하고, 이 환경 변수에process.env.TOKEN
으로 액세스할 수 있는.github/actions-scripts/use-the-api.mjs
를 실행합니다.
예제 워크플로:
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
JavaScript 스크립트 예제(파일 경로: .github/actions-scripts/use-the-api.mjs
):
import { Octokit } from "octokit";
const octokit = new Octokit({
auth: process.env.TOKEN,
});
await octokit.request("GET /octocat", {});
스크립트를 별도의 파일에 저장하고 워크플로에서 스크립트를 실행하는 대신 actions/github-script
작업을 사용하여 스크립트를 실행할 수 있습니다. 자세한 내용은 actions/github-script 추가 정보를 참조하세요.
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 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를 사용하여 헤더를 보내려면 key: value
형식으로 뒤에 헤더가 따라오는 --header
또는 -H
플래그를 사용합니다.
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
헤더를 전달하려면 request
메서드에 두 번째 인수로 전달되는 개체에 headers
속성을 추가합니다. headers
속성의 값은 헤더 이름을 키로, 헤더 값을 값으로 가지고 있는 개체입니다. 예를 들어 text/plain
의 값과 함께 content-type
헤더를 보내려면 다음을 수행합니다.
await octokit.request("GET /octocat", {
headers: {
"content-type": "text/plain",
"X-GitHub-Api-Version": "2022-11-28",
},
});
curl
명령에서 머리글을 보내려면 key: value
형식으로 뒤에 헤더가 따라오는 --header
또는 -H
플래그를 사용합니다.
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
리포지토리에서 이슈를 가져오려면 octocat
으로 {owner}
를, Spoon-Knife
로 {repo}
를 바꿉니다.
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
리포지토리에서 이슈를 가져오려면 octocat
으로 {owner}
를, Spoon-Knife
로 {repo}
를 바꿉니다. 전체 경로를 빌드하려면 GitHub REST API인 https://api.github.com
(https://api.github.com/repos/octocat/Spoon-Knife/issues
)에 대한 기준 URL 앞에 추가합니다.
curl --request GET \
--url "https://api.github.com/repos/octocat/Spoon-Knife/issues" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer YOUR-TOKEN"
작업은 각 이슈에 대한 이슈 및 데이터 목록을 반환합니다. 응답 사용에 대한 자세한 내용은 “응답 사용” 섹션을 참조하세요.
쿼리 문자열 매개 변수
쿼리 매개 변수를 사용하면 요청에 대해 반환되는 데이터를 제어할 수 있습니다. 예를 들어 쿼리 매개 변수를 사용하면 응답에 페이지를 매길 때 반환되는 항목 수를 지정할 수 있습니다.
기본적으로 “리포지토리 이슈 나열” 작업은 만든 날짜별로 내림차순으로 정렬된 30개의 이슈를 반환합니다. per_page
매개 변수를 사용하여 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에 전달할 수 있습니다. 예를 들어 “이슈 만들기” 작업을 수행하려면 새 이슈에 대한 제목을 지정해야 합니다. 또한 이슈 본문에 넣을 텍스트와 같은 다른 정보를 지정할 수도 있습니다. 이 작업에 대한 전체 참조 설명서는 “이슈”을(를) 참조하세요.
“이슈 만들기” 작업은 위의 예제에서 “리포지토리 이슈 나열” 작업과 동일한 경로를 사용하지만 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
을(를) 바꾸어야 합니다. 토큰은 해당 리포지토리에 액세스할 수 있어야 하며 리포지토리 이슈에 대한 읽기 및 쓰기 권한이 있어야 합니다. 리포지토리를 만드는 자세한 정보는 “리포지토리 만들기”을(를) 참조하세요. 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-remaining
및 x-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
블록을 사용하여 오류를 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 참조 설명서를 참조하세요.