Skip to main content

이 버전의 GitHub Enterprise Server는 다음 날짜에 중단됩니다. 2023-12-20. 중요한 보안 문제에 대해서도 패치 릴리스가 이루어지지 않습니다. 더 뛰어난 성능, 향상된 보안, 새로운 기능을 위해 최신 버전의 GitHub Enterprise Server로 업그레이드합니다. 업그레이드에 대한 도움말은 GitHub Enterprise 지원에 문의하세요.

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 경로를 사용합니다. 이 작업에 대한 전체 참조 설명서는 “메타”을(를) 참조하세요.

참고: 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의 인스턴스를 만듭니다. 기준 URL을 http(s)://HOSTNAME/api/v3(으)로 설정합니다. [hostname]을 GitHub Enterprise Server 인스턴스의 이름으로 바꿉니다.

const octokit = new Octokit({ 
  baseUrl: "http(s)://HOSTNAME/api/v3",
});

그런 다음, request 메서드를 사용하여 요청을 수행합니다. HTTP 메서드와 경로를 첫 번째 인수로 전달합니다.

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

GitHub REST API, http(s)://HOSTNAME/api/v3의 기준 URL을 전체 URL을 가져오는 경로 앞에 추가합니다 http(s)://HOSTNAME/api/v3/octocat. [hostname]을 GitHub Enterprise Server 인스턴스의 이름으로 바꿉니다.

명령줄에서 curl 명령을 사용합니다. --request 또는 -X 플래그를 사용하고 그 뒤에는 HTTP 메서드가 따라옵니다. --url 플래그를 사용하고 그 뒤에는 전체 URL이 따라옵니다.

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

참고: “command not found: curl”과 유사한 메시지가 표시되면 curl을 다운로드하여 설치해야 할 수 있습니다. 자세한 내용은 curl 프로젝트 다운로드 페이지를 참조하세요.

계속해서 읽으면 인증하고, 매개 변수를 보내고, 응답을 사용하는 방법을 살펴볼 수 있습니다.

인증

인증된 경우 많은 작업에 인증이 필요하거나 추가 정보를 반환해야 합니다. 또한 인증되면 시간당 더 많은 요청을 수행할 수 있습니다.

일부 REST API 작업에는 인증 없이 액세스할 수 있지만 api 하위 명령을 사용하려면 GitHub CLI에 인증해야 합니다.

토큰 정보

토큰을 추가하여 요청을 인증할 수 있습니다.

개인용으로 GitHub REST API를 사용하려는 경우 personal access token를 만들 수 있습니다. 이 문서에서 사용되는 REST API 작업에는 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에서 비밀 사용"을 참조하세요.

이러한 옵션을 사용할 수 없는 경우 다른 CLI 서비스를 사용하여 토큰을 안전하게 저장하는 것이 좋습니다.

Octokit.js 라이브러리를 사용하여 인증하려면 Octokit의 인스턴스를 만들 때 토큰을 전달할 수 있습니다. YOUR-TOKEN을 토큰으로 바꿉니다. [hostname]을 GitHub Enterprise Server 인스턴스의 이름으로 바꿉니다.

const octokit = new Octokit({ 
  baseUrl: "http(s)://HOSTNAME/api/v3",
  auth: 'YOUR-TOKEN',
});

경고: 액세스 토큰을 암호와 같이 취급하세요.

계정을 안전하게 유지하기 위해 curl 명령 대신 GitHub CLI를 사용할 수 있습니다. GitHub CLI가 대신 인증을 처리합니다. 자세한 내용은 이 페이지의 GitHub CLI 버전을 참조하세요.

이러한 옵션을 사용할 수 없는 경우 다른 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에서 비밀 사용"을(를) 참조하세요.

다음 예제 워크플로:

  1. 리포지토리 콘텐츠 체크 아웃
  2. Node.js 설정
  3. octokit를 설치합니다.
  4. 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({ 
  baseUrl: "http(s)://HOSTNAME/api/v3",
  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' --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",
  },
});

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"

경로 매개 변수 사용

경로 매개 변수는 작업 경로를 수정합니다. 예를 들어 “리포지토리 이슈 나열” 경로는 /repos/{owner}/{repo}/issues입니다. 중괄호 {}는 지정해야 하는 경로 매개 변수를 나타냅니다. 이 경우 리포지토리 소유자 및 이름을 지정해야 합니다. 이 작업에 대한 참조 설명서는 “이슈”을(를) 참조하세요.

참고: 이 명령이 GitHub Enterprise Server 인스턴스에 대해 작동하려면 octocat/Spoon-Knife를 GitHub Enterprise Server 인스턴스가 소유한 리포지토리로 바꿉니다. 그렇지 않으면 gh auth login 명령을 다시 실행하여 GitHub Enterprise Server 인스턴스 대신 GitHub.com에 인증합니다.

octocat/Spoon-Knife 리포지토리에서 이슈를 가져오려면 octocat으로 {owner}를, Spoon-Knife{repo}를 바꿉니다.

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

참고: 이 예제가 GitHub Enterprise Server 인스턴스에 대해 작동하려면 octocat/Spoon-Knife를 GitHub Enterprise Server 인스턴스가 소유한 리포지토리로 바꿉니다. 그렇지 않으면 새 Octokit 인스턴스를 만들고 baseURL은 지정하지 않습니다.

Octokit.js를 사용하여 요청하면 경로 매개 변수를 포함한 모든 매개 변수가 개체에서 request 메서드에 대한 두 번째 인수로 전달됩니다. octocat/Spoon-Knife 리포지토리에서 이슈를 가져오려면 owneroctocat으로, repoSpoon-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 앞에 추가합니다.

참고: GitHub.com 대신 GitHub Enterprise Server 인스턴스를 사용하려면 https://api.github.com 대신 http(s)://HOSTNAME/api/v3를 사용하고 [hostname]을 GitHub Enterprise Server 인스턴스의 이름으로 바꿉니다. octocat/Spoon-Knife를 GitHub Enterprise Server 인스턴스가 소유한 리포지토리로 바꿉니다.

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"

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

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 블록을 사용하여 오류를 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 참조 설명서를 참조하세요.