소개
이 문서에서는 GitHub REST API를 GitHub CLI, curl 또는 JavaScript와 함께 사용하는 방법을 설명합니다. 빠른 시작 가이드는 GitHub REST API에 대한 빠른 시작을(를) 참조하세요.
이 문서의 예제에서는 https://api.github.com에 요청을 보냅니다. 다른 도메인인 octocorp.ghe.com 에서 GitHub에 액세스하는 경우, API 요청의 엔드포인트는 해당 도메인을 반영합니다. 예: https://api.octocorp.ghe.com/.
REST API에 대한 요청 정보
이 섹션에서는 API 요청을 구성하는 요소에 대해 설명합니다.
-
[HTTP 메서드](#http-method) -
[Path](#path) -
[헤더](#headers) -
[미디어 유형](#media-types) -
[인증](#authentication) -
[매개 변수](#parameters)
REST API에 대한 모든 요청에는 HTTP 메서드와 경로가 포함됩니다. REST API 엔드포인트에 따라 요청 헤더, 인증 정보, 쿼리 매개 변수 또는 본문 매개 변수를 지정해야 할 수도 있습니다.
REST API 참조 설명서에서는 모든 엔드포인트에 대한 HTTP 메서드, 경로 및 매개 변수를 설명합니다. 또한 각 엔드포인트에 대한 예제 요청 및 응답도 표시합니다. 자세한 내용은 REST 참조 문서를 참조하세요.
HTTP 메서드
엔드포인트의 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}을(를) 리포지토리를 소유한 계정의 이름으로 바꿉니다.
헤더
헤더는 요청 및 원하는 응답에 대한 추가 정보를 제공합니다. 다음은 REST API에 대한 요청에 사용할 수 있는 헤더의 GitHub 몇 가지 예입니다. 헤더를 사용하는 요청의 예는 요청하기를 참조하세요.
Accept
대부분의 GitHub REST API 엔드포인트는 Accept 헤더를 application/vnd.github+json 값으로 전달해야 한다고 명시합니다.
Accept 헤더의 값은 미디어 유형입니다. 미디어 유형에 대한 자세한 내용은 미디어 유형을 참조하세요.
X-GitHub-Api-Version
요청에 사용할 REST API 버전을 지정하려면 이 헤더를 사용해야 합니다. 자세한 내용은 API 버전을(를) 참조하세요.
User-Agent
모든 API 요청에는 유효한 User-Agent 헤더가 포함되어야 합니다.
User-Agent 헤더는 요청을 만드는 사용자 또는 응용 프로그램을 식별합니다.
기본적으로 GitHub CLI은(는) 유효한 User-Agent 헤더를 보냅니다. 그러나 GitHub 헤더 값에 사용자 GitHub 이름 또는 애플리케이션 User-Agent 이름을 사용하는 것이 좋습니다. 이렇게 하면 문제가 있는 경우 GitHub이(가) 연락할 수 있습니다.
기본적으로 curl은(는) 유효한 User-Agent 헤더를 보냅니다. 그러나 GitHub 헤더 값에 사용자 GitHub 이름 또는 애플리케이션 User-Agent 이름을 사용하는 것이 좋습니다. 이렇게 하면 문제가 있는 경우 GitHub가(이) 연락할 수 있습니다.
Octokit.js SDK를 사용하는 경우 SDK는 유효한 User-Agent 헤더를 보냅니다. 그러나 GitHub 헤더 값에 사용자 GitHub 이름 또는 애플리케이션 User-Agent 이름을 사용하는 것이 좋습니다. 문제가 있는 경우 GitHub가 귀하에게 연락할 수 있습니다.
다음은 User-Agent 이름이 지정된 앱의 Awesome-Octocat-App 예입니다.
User-Agent: Awesome-Octocat-App
`User-Agent` 헤더가 없는 요청은 거부됩니다. 잘못된 `User-Agent` 헤더를 제공하는 경우 `403 Forbidden` 응답을 받게 됩니다.
미디어 유형
요청의 Accept 헤더에 미디어 유형을 추가하여 하나 이상의 미디어 유형을 지정할 수 있습니다.
Accept 헤더에 대한 자세한 내용은 Accept를 참조하세요.
미디어 유형은 API에서 사용하려는 데이터의 형식을 지정합니다. 미디어 유형은 리소스에 따라 다르기 때문에 독립적으로 변경하고 다른 리소스에서 지원하지 않는 형식을 지원할 수 있습니다. 각 GitHub REST API 엔드포인트에 대한 설명서에서는 지원하는 미디어 유형을 설명합니다. 자세한 내용은 GitHub REST API 설명서을 참조하세요.
REST API에서 GitHub 지원하는 가장 일반적인 미디어 유형은 다음과 같습니다 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을(를) 사용합니다.
미디어 유형을 사용하는 요청의 예는 요청하기를 참조하세요.
인증
인증된 경우 많은 엔드포인트에 인증이 필요하거나 추가 정보를 반환해야 합니다. 또한 인증 시 시간당 더 많은 요청을 수행할 수 있습니다.
요청을 인증하려면 필요한 범위 또는 권한이 포함된 인증 토큰을 제공해야 합니다. 토큰을 얻는 몇 가지 방법이 있습니다: 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 메서드는 요청의 매개 변수에 추가 정보를 보내도록 요구하거나 허용합니다. 매개 변수에는 경로 매개 변수, 본문 매개 변수 및 쿼리 매개 변수와 같은 몇 가지 매개 변수 유형이 있습니다.
경로 매개 변수
경로 매개 변수는 엔드포인트 경로를 수정합니다. 이러한 매개 변수는 요청에 필수입니다. 자세한 내용은 경로를 참조하세요.
본문 매개 변수
본문 매개 변수를 사용하면 추가 데이터를 API에 전달할 수 있습니다. 이러한 매개 변수는 엔드포인트에 따라 선택 사항이거나 필수 사항일 수 있습니다. 예를 들어 본문 매개 변수를 사용하면 새 문제를 만들 때 문제 제목을 지정하거나 기능을 사용하거나 사용하지 않도록 설정할 때 특정 설정을 지정할 수 있습니다. 각 GitHub REST API 엔드포인트에 대한 설명서에서는 지원하는 본문 매개 변수를 설명합니다. 자세한 내용은 GitHub REST API 설명서을 참조하세요.
예를 들어 "문제 만들기" 엔드포인트를 수행하려면 새 문제에 대한 제목을 지정해야 합니다. 또한 필요에 따라 문제 본문에 넣을 텍스트, 새 문제에 할당할 사용자 또는 새 문제에 적용할 레이블과 같은 기타 정보를 지정할 수 있습니다. 본문 매개 변수를 사용하는 요청의 예는 요청하기를 참조하세요.
본문 매개 변수를 전달하려면 요청을 인증해야 합니다. 자세한 내용은 인증참조하세요.
쿼리 매개 변수
쿼리 매개 변수를 사용하면 요청에 대해 반환되는 데이터를 제어할 수 있습니다. 이러한 매개 변수는 일반적으로 선택 사항입니다. 각 GitHub REST API 엔드포인트에 대한 설명서에서는 지원하는 모든 쿼리 매개 변수를 설명합니다. 자세한 내용은 GitHub REST API 설명서을 참조하세요.
예를 들어 "공개 이벤트 나열" 엔드포인트는 기본적으로 30개의 문제를 반환합니다.
per_page 쿼리 매개 변수를 사용하여 30개가 아닌 2개의 이슈를 반환할 수 있습니다.
page 쿼리 매개 변수를 사용하여 결과의 첫 번째 페이지만 가져올 수 있습니다. 쿼리 매개 변수를 사용하는 요청의 예는 요청하기를 참조하세요.
요청하기
이 섹션에서는 .를 사용하여 GitHubREST API에 GitHub CLI 인증된 요청을 만드는 방법을 보여 줍니다.
1. 설정
GitHub CLI를 macOS, Windows 또는 Linux에 설치합니다. 자세한 내용은 리포지토리의 [설치](https://github.com/cli/cli#installation) 를 GitHub CLI 참조하세요.
2. 인증
-
인증 GitHub하려면 터미널에서 다음 명령을 실행합니다.
gh auth login`--scopes` 옵션을 사용하여 원하는 범위를 지정할 수 있습니다. 만든 토큰으로 인증하려는 경우 `--with-token` 옵션을 사용할 수 있습니다. 자세한 내용은 [설명서를 참조하세요GitHub CLI`auth login`](https://cli.github.com/manual/gh_auth_login). -
인증하려는 위치를 선택합니다.
-
GitHub에 액세스하는 경우, GitHub.com에서 **GitHub.com** 을 선택합니다. - 다른 도메인에서 액세스 GitHub 하는 경우 기타를 선택한 다음 호스트 이름(예:
octocorp.ghe.com)을 입력합니다.
-
-
화면에 표시되는 나머지 메시지를 따릅니다.
GitHub CLI 는 Git 작업에 대한 기본 프로토콜로 HTTPS를 선택하고 자격 증명으로 Git에 인증할지 묻는 프롬프트에 "예"라고 대답할 때 자동으로 Git GitHub 자격 증명을 저장합니다. 이는 별도의 자격 증명 관리자를 설정하거나 SSH를 사용하지 않고도 `git push`, `git pull` 등의 Git 명령을 사용할 수 있으므로 유용할 수 있습니다.
3. 요청에 대한 엔드포인트 선택
-
요청할 엔드포인트를 선택합니다.
의 REST API 설명서 를 탐색하여와 상호 작용할 수 있는 엔드포인트를 발견할 수 있습니다. -
엔드포인트의 HTTP 메서드 및 경로를 식별합니다. 요청과 함께 이러한 것들을 보냅니다. 자세한 내용은 HTTP 메서드 및 경로를 참조하세요.
예를 들어 "문제 만들기" 엔드포인트는 HTTP 메서드
POST및/repos/{owner}/{repo}/issues경로를 사용합니다. -
필요한 경로 매개 변수를 식별합니다. 필수 경로 매개 변수는 엔드포인트의 경로에 중괄호
{}로 표시됩니다. 각 매개 변수 자리 표시자를 원하는 값으로 바꿉니다. 자세한 내용은 경로를 참조하세요.예를 들어 "문제 만들기" 엔드포인트는
/repos/{owner}/{repo}/issues경로를 사용하며 경로 매개 변수는{owner}및{repo}입니다. API 요청에서 이 경로를 사용하려면{repo}을(를) 새 문제를 만들 리포지토리의 이름으로 바꾸고{owner}을(를) 리포지토리를 소유한 계정의 이름으로 바꿉니다.
4. 다음으로 GitHub CLI를 사용하여 요청을 만드세요.
GitHub CLI
`api` 하위 명령을 사용하여 API 요청을 만듭니다. 자세한 내용은 [설명서를 참조하세요GitHub CLI`api`](https://cli.github.com/manual/gh_api).
요청 시 다음 옵션 및 값을 지정합니다.
*
--호스트: 여러 GitHub 플랫폼에서 여러 계정에 인증된 경우 요청을 수행할 위치를 지정합니다. 예: --hostname octocorp.ghe.com.
*
--메서드 다음에 HTTP 메서드와 엔드포인트의 경로가 옵니다. 자세한 내용은 HTTP 메서드 및 경로를 참조하세요.
*
--헤더
*
**
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 옵션을 사용하여 문자열 매개 변수를 전달합니다.
일부 엔드포인트는 배열인 쿼리 매개 변수를 사용합니다. 쿼리 문자열에서 배열을 보내려면 배열 항목당 쿼리 매개 변수를 한 번 사용하고 쿼리 매개 변수 이름 뒤에 []을(를) 추가 합니다. 예를 들어 두 리포지토리 ID의 배열을 제공하려면 -f repository_ids[]=REPOSITORY_A_ID -f repository_ids[]=REPOSITORY_B_ID를 사용합니다.
요청에서 본문 매개 변수 또는 쿼리 매개 변수를 지정할 필요가 없는 경우 이 옵션을 생략합니다. 자세한 내용은 본문 매개 변수 및 쿼리 매개 변수를 참조하세요. 예제는 본문 매개 변수를 사용한 예제 요청 및 쿼리 매개 변수를 사용한 예제 요청을 참조하세요.
*
--호스트: 여러 GitHub 플랫폼에서 여러 계정에 인증된 경우 요청을 수행할 위치를 지정합니다. 예: --hostname octocorp.ghe.com.
예제 요청
다음 예제 요청에서는 "Octocat 가져오기" 엔드포인트를 사용하여 Octocat을 ASCII 아트로 반환합니다.
gh api --method GET /octocat \ --header 'Accept: application/vnd.github+json' \ --header "X-GitHub-Api-Version: 2022-11-28"
gh api --method GET /octocat \
--header 'Accept: application/vnd.github+json' \
--header "X-GitHub-Api-Version: 2022-11-28"
쿼리 매개 변수를 사용하는 예제 요청
["공개 이벤트 나열" 엔드포인트](/rest/activity/events#list-public-events)는 기본적으로 30개의 문제를 반환합니다. 다음 예제에서는 `per_page` 쿼리 매개 변수를 사용하여 30개가 아닌 2개의 문제를 반환하고 `page` 쿼리 매개 변수를 사용하여 결과의 첫 번째 페이지만 가져옵니다.
gh api --method GET /events -F per_page=2 -F page=1 --header 'Accept: application/vnd.github+json' \
gh api --method GET /events -F per_page=2 -F page=1
--header 'Accept: application/vnd.github+json' \
본문 매개 변수를 사용한 예제 요청
다음 예제에서는 "문제 만들기" 엔드포인트를 사용하여 지정된 리포지토리에 새 문제를 만듭니다. 응답에서 문제의 특정 부분을 html_url 식별하고, 브라우저에서 해당 문제로 이동하여 탐색합니다.
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' \
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' \
이 섹션에서는 .를 사용하여 GitHubREST API에 curl 인증된 요청을 만드는 방법을 보여 줍니다.
1. 설정
해당 머신에 curl이 설치되어 있어야 합니다.
curl이 설치되어 있는지 확인하려면 명령줄에서 curl --version을 실행합니다.
-
`curl` 버전에 대한 정보가 출력되면 `curl`이(가) 설치된 것입니다. -
`command not found: curl`과 유사한 메시지가 표시된느 경우 `curl`이 설치되지 않은 것입니다. `curl`을 다운로드하여 설치합니다. 자세한 내용은 [cURL 다운로드 페이지](https://curl.se/download.html)를 참조하세요.
2. 요청에 대한 엔드포인트 선택
-
요청할 엔드포인트를 선택합니다. GitHub의 REST API 설명서를 탐색하여 GitHub와 상호 작용할 수 있는 엔드포인트를 발견할 수 있습니다.
-
엔드포인트의 HTTP 메서드 및 경로를 식별합니다. 요청과 함께 이러한 것들을 보냅니다. 자세한 내용은 HTTP 메서드 및 경로를 참조하세요.
예를 들어 "문제 만들기" 엔드포인트는 HTTP 메서드
POST및/repos/{owner}/{repo}/issues경로를 사용합니다. -
필요한 경로 매개 변수를 식별합니다. 필수 경로 매개 변수는 엔드포인트의 경로에 중괄호
{}로 표시됩니다. 각 매개 변수 자리 표시자를 원하는 값으로 바꿉니다. 자세한 내용은 경로를 참조하세요.예를 들어 "문제 만들기" 엔드포인트는
/repos/{owner}/{repo}/issues경로를 사용하며 경로 매개 변수는{owner}및{repo}입니다. API 요청에서 이 경로를 사용하려면{repo}을(를) 새 문제를 만들 리포지토리의 이름으로 바꾸고{owner}을(를) 리포지토리를 소유한 계정의 이름으로 바꿉니다.
3. 인증 자격 증명 만들기
요청을 인증할 액세스 토큰을 만듭니다. 토큰을 저장하여 여러 요청에 사용할 수 있습니다. 토큰에 엔드포인트에 액세스하는 데 필요한 범위 또는 권한을 부여합니다. 해당 요청과 함께 Authorization 헤더에 이 토큰을 보냅니다. 자세한 내용은 인증참조하세요.
4. curl 요청 만들기
`curl` 명령을 사용하여 요청을 수행합니다. 자세한 정보는 [cURL 설명서](https://curl.se/docs/manpage.html)를 참조하세요.
해당 요청에 다음 옵션 및 값을 지정합니다.
-
** `--request` 또는 `-X`** 는 HTTP 메서드가 값으로 따라옵니다. 자세한 내용은 [HTTP 메서드](#http-method)를 참조하세요. -
** `--url` ** 뒤에 전체 경로가 값으로 따라옵니다. 전체 경로는 GitHub REST API의 기본 URL(`https://api.github.com` 또는 `https://api.SUBDOMAIN.ghe.com`)과 엔드포인트의 경로를 포함하는 URL입니다. 여기서 어떤 위치에서 액세스하는지에 따라 다릅니다GitHub`https://api.github.com/PATH`. 엔드포인트의 경로로 바꿉다 `PATH` . 자세한 내용은 [경로](#path)를 참조하세요.쿼리 매개 변수를 사용하려면 경로 끝에
?를 추가한 다음 쿼리 매개 변수 이름과 값을parameter_name=value양식으로 추가합니다. 쿼리 매개 변수가 여러 개이면&로 구분합니다. 쿼리 문자열에서 배열을 보내려면 배열 항목당 쿼리 매개 변수를 한 번 사용하고 쿼리 매개 변수 이름 뒤에[]을(를) 추가 합니다. 예를 들어 두 리포지토리 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을 사용하여 토큰을 전달할 수 있습니다. 그러나 JWT(JSON 웹 토큰)를 전달하는 경우Authorization: Bearer를 사용해야 합니다. 자세한 내용은 인증참조하세요.Authorization헤더를 사용하는 요청의 예제는 본문 매개 변수를 사용한 예제 요청을 참조하세요. -
** `--data` 또는 `-d`** JSON 개체 내의 모든 본문 매개 변수가 뒤에 옵니다. 요청에 본문 매개 변수를 지정할 필요가 없는 경우 이 옵션을 생략합니다. 자세한 내용은 [본문 매개 변수](#body-parameters)를 참조하세요. 예제는 [본문 매개 변수를 사용하는 예제 요청](#example-request-using-body-parameters-1)을 참조하세요.
예제 요청
다음 예제 요청에서는 "Octocat 가져오기" 엔드포인트를 사용하여 Octocat을 ASCII 아트로 반환합니다.
curl --request GET \ --url "https://api.github.com/octocat" \ --header "Accept: application/vnd.github+json" \ --header "X-GitHub-Api-Version: 2022-11-28"
curl --request GET \
--url "https://api.github.com/octocat" \
--header "Accept: application/vnd.github+json" \
--header "X-GitHub-Api-Version: 2022-11-28"
쿼리 매개 변수를 사용하는 예제 요청
["공개 이벤트 나열" 엔드포인트](/rest/activity/events#list-public-events)는 기본적으로 30개의 문제를 반환합니다. 다음 예제에서는 `per_page` 쿼리 매개 변수를 사용하여 30개가 아닌 2개의 문제를 반환하고 `page` 쿼리 매개 변수를 사용하여 결과의 첫 번째 페이지만 가져옵니다.
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
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
본문 매개 변수를 사용한 예제 요청
다음 예제에서는 문제 엔드포인트 만들기를 사용하여 지정된 리포지토리에 새 문제를 만듭니다. 이전에 만든 인증 토큰으로 YOUR-TOKEN을(를) 바꾸십시오.
참고
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"
}'
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 및 GitHub사용하여 REST API에 요청하는 방법을 보여 줍니다. 자세한 가이드는 REST API 및 JavaScript를 사용하여 스크립팅을(를) 참조하세요.
1. 설정
다음 예제에 표시된 대로 Octokit.js 라이브러리를 사용하려면 octokit을 설치해야 합니다.
-
`octokit`를 설치합니다. 예: `npm install octokit`. `octokit`를 설치 또는 로드하는 다른 방법은 [Octokit.js 추가 정보](https://github.com/octokit/octokit.js/#readme)를 참조하세요.
2. 요청에 대한 엔드포인트 선택
-
요청할 엔드포인트를 선택합니다. 당신은
의 REST API 설명서 를 탐색하여와 상호 작용할 수 있는 엔드포인트를 발견할 수 있습니다. -
엔드포인트의 HTTP 메서드 및 경로를 식별합니다. 요청과 함께 이러한 것들을 보냅니다. 자세한 내용은 HTTP 메서드 및 경로를 참조하세요.
예를 들어 "문제 만들기" 엔드포인트는 HTTP 메서드
POST및/repos/{owner}/{repo}/issues경로를 사용합니다. -
필요한 경로 매개 변수를 식별합니다. 필수 경로 매개 변수는 엔드포인트의 경로에 중괄호
{}로 표시됩니다. 각 매개 변수 자리 표시자를 원하는 값으로 바꿉니다. 자세한 내용은 경로를 참조하세요.예를 들어 "문제 만들기" 엔드포인트는
/repos/{owner}/{repo}/issues경로를 사용하며 경로 매개 변수는{owner}및{repo}입니다. API 요청에서 이 경로를 사용하려면{repo}을(를) 새 문제를 만들 리포지토리의 이름으로 바꾸고{owner}을(를) 리포지토리를 소유한 계정의 이름으로 바꿉니다.
3. 액세스 토큰 만들기
요청을 인증할 액세스 토큰을 만듭니다. 토큰을 저장하여 여러 요청에 사용할 수 있습니다. 토큰에 엔드포인트에 액세스하는 데 필요한 범위 또는 권한을 부여합니다. 해당 요청과 함께 Authorization 헤더에 이 토큰을 보냅니다. 자세한 내용은 인증참조하세요.
4. Octokit.js를 사용하여 요청하기
-
스크립트로
octokit를 가져옵니다. 예:import { Octokit } from "octokit";.octokit를 가져오는 다른 방법은 the Octokit.js 추가 정보를 참조하세요. -
토큰을 사용하여 인스턴스
Octokit를 만듭니다.YOUR-TOKEN을 토큰으로 바꿉니다.JavaScript const octokit = new Octokit({ auth: 'YOUR-TOKEN' });const octokit = new Octokit({ auth: 'YOUR-TOKEN' }); -
`octokit.request`를 사용하여 요청을 실행합니다.- HTTP 메서드 및 경로를
request메서드에 대한 첫 번째 인수로 보냅니다. 자세한 내용은 HTTP 메서드 및 경로를 참조하세요. - 개체의 경로, 쿼리 및 본문 매개 변수를
request메서드에 대한 두 번째 인수로 지정합니다. 자세한 내용은 매개 변수를 참조하세요.
다음 예제 요청에서 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를 본인이 소유하거나 구성원인 조직이 소유한 리포지토리로 변경해야 합니다. 토큰은 해당 리포지토리에 액세스할 수 있어야 하며 리포지토리 이슈에 대한 읽기 및 쓰기 권한이 있어야 합니다. 자세한 내용은 개인용 액세스 토큰 관리을(를) 참조하세요.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", });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` 머리글을 전달하려면 두 번째 인수로 전달되는 개체에 `headers` 속성을 추가합니다. `headers` 속성의 값은 헤더 이름을 키로, 헤더 값을 값으로 가지고 있는 개체입니다.예를 들어 다음 코드는 값이
content-type인text/plain헤더와 값이X-GitHub-Api-Version인2026-03-10헤더를 보냅니다.JavaScript await octokit.request("GET /octocat", { headers: { "content-type": "text/plain", "X-GitHub-Api-Version": "2026-03-10", }, });await octokit.request("GET /octocat", { headers: { "content-type": "text/plain", "X-GitHub-Api-Version": "2026-03-10", }, }); - HTTP 메서드 및 경로를
응답 사용
요청하면 API는 응답 상태 코드, 응답 헤더 및 잠재적으로 응답 본문을 반환합니다.
응답 코드 및 헤더 정보
모든 요청은 응답의 성공을 나타내는 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-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 객체는 응답의 HTTP 상태 코드(status) 및 응답 헤더(headers)를 포함하는 개체로 처리됩니다. 오류가 발생하면 프로미스는 응답의 HTTP 상태 코드(status) 및 응답 헤더(response.headers)를 포함하는 개체로 반환됩니다.
오류가 발생하는 경우 try/catch 블록을 사용하여 오류를 catch할 수 있습니다. 예를 들어 다음 스크립트의 요청이 성공하면 스크립트는 상태 코드와 x-ratelimit-remaining 헤더 값을 기록합니다. 요청에 실패하면 스크립트는 상태 코드, x-ratelimit-remaining 헤더의 값 및 오류 메시지를 기록합니다.
다음 예제에서는 REPO-OWNER을(를) 리포지토리를 소유하는 계정의 이름으로 바꾸고 REPO-NAME을(를) 리포지토리의 이름으로 바꿉니다.
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}`)
}
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 옵션을 사용합니다.
예를 들어 이 요청은 지정된 리포지토리의 문제 목록을 가져옵니다.
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로 포함됩니다. 모든 타임스탬프는 UTC 시간, ISO 8601 형식 YYYY-MM-DDTHH:MM:SSZ(으)로 반환됩니다.
원하는 정보를 지정하는 GraphQL API와 달리 REST API는 일반적으로 필요한 것보다 더 많은 정보를 반환합니다. 원하는 경우 응답을 구문 분석하여 특정 정보를 가져올 수 있습니다.
예를 들어 >를 사용하여 응답을 파일로 리디렉션할 수 있습니다. 다음 예제에서는 REPO-OWNER을(를) 리포지토리를 소유하는 계정의 이름으로 바꾸고 REPO-NAME을(를) 리포지토리의 이름으로 바꿉니다.
gh api \ --header 'Accept: application/vnd.github+json' \ --method GET /repos/REPO-OWNER/REPO-NAME/issues \ -F per_page=2 > data.json
gh api \
--header 'Accept: application/vnd.github+json' \
--method GET /repos/REPO-OWNER/REPO-NAME/issues \
-F per_page=2 > data.json
그런 다음 jq를 사용하여 각 이슈의 제목 및 작성자 ID를 가져올 수 있습니다.
jq '.[] | {title: .title, authorID: .user.id}' data.json
jq '.[] | {title: .title, authorID: .user.id}' data.json
이전 두 명령은 다음과 같이 반환합니다.
{
"title": "Update index.html",
"authorID": 10701255
}
{
"title": "Edit index file",
"authorID": 53709285
}
jq에 대한 자세한 정보는 jq 설명서를 참조하세요.
예를 들어 각 문제의 제목 및 작성자 ID를 가져올 수 있습니다. 다음 예제에서는 REPO-OWNER을(를) 리포지토리를 소유하는 계정의 이름으로 바꾸고 REPO-NAME을(를) 리포지토리의 이름으로 바꿉니다.
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}`)
}
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을(를) 대체하십시오.
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
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를 사용하여 각 이슈의 제목 및 작성자 ID를 가져올 수 있습니다.
jq '.[] | {title: .title, authorID: .user.id}' data.json
jq '.[] | {title: .title, authorID: .user.id}' data.json
이전 두 명령은 다음과 같이 반환합니다.
{
"title": "Update index.html",
"authorID": 10701255
}
{
"title": "Edit index file",
"authorID": 53709285
}
jq에 대한 자세한 정보는 jq 설명서를 참조하세요.
상세 표현과 요약 표현
응답에는 개별 리소스를 가져오는지 아니면 리소스 목록을 가져오는지 여부에 따라 리소스에 대한 모든 속성이 포함될 수도 있고 속성의 하위 집합만 포함될 수도 있습니다.
- 특정 리포지토리와 같은 _개별 리소스_를 가져올 때 응답에는 일반적으로 해당 리소스에 대한 모든 속성이 포함됩니다. 리소스의 "자세한" 표현입니다.
- 여러 리포지토리 목록과 같은 _리소스 목록_을 가져오는 경우 응답에는 각 리소스에 대한 속성의 하위 집합만 포함됩니다. 리소스의 "요약" 표현입니다.
경우에 따라 권한 부여는 표현에 포함된 세부 정보의 양에 영향을 줍니다.
그 이유는 일부 특성이 API에서 제공하는 계산 비용이 많이 들기 때문에 GitHub 요약 표현에서 해당 특성을 제외하기 때문입니다. 이러한 속성을 얻기 위해 자세한 표현을 가져올 수 있습니다.
설명서는 각 API 메서드에 대한 예제 응답을 제공합니다. 예제 응답은 해당 메서드에서 반환되는 모든 특성을 보여 줍니다.
하이퍼미디어
모든 리소스에는 다른 리소스에 연결된 하나 이상의 *_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"
속도 제한
REST API는 GitHub 지정된 기간 내에 수행할 수 있는 요청 수를 제한합니다. 속도 제한 및 현재 속도 제한 상태를 확인하는 방법에 대한 자세한 내용은 REST API에 대한 트래픽률 제한을 참조하세요.
다음 단계
이 문서에서는 리포지토리에서 이슈를 나열하고 만드는 방법을 보여 줍니다. 더 많은 연습을 위해 이슈에 대해 주석을 달거나, 이슈의 제목을 편집하거나, 이슈를 닫습니다. 자세한 내용은 "문제 주석 만들기" 엔드포인트 및 "문제 업데이트" 엔드포인트를 참조하세요.
사용할 수 있는 엔드포인트에 대한 자세한 내용은 REST 참조 설명서를 참조하세요.