GitHub API의 작동 방식을 알고 API에서 리포지토리를 만들자.

5721 단어 OAuthGitHubGitHubAPI

소개



로컬 Git 리포지토리를 GItHub 등 다른 서비스에 통째로 이식한다 방법을 스크립팅하는 것이 좋습니다만, 하나하나 수동으로 UI로부터 빈 리포지터리 작성하는 것? 귀찮아?
그래서 GitHub의 리포지토리를 명령 기반으로 만드는 방법을 찾았습니다. 결론을 말하면 GitHub API v3을 사용하면 됩니다.
또한 API를 사용하려면 OAuth 인증을 수행해야합니다.

GitHub 인증 - Authorizing OAuth Apps



Access Token을 발행하여 사용한다. 게시는 UI에서 가능



GitHub에서는 API를 이용하기 위해 Access Token을 취득해야 합니다.
좀 API를 사용하고 싶다면 tokens에서 New personal access token를 선택하면 OK입니다.

API를 이용한 Access Token 생성도 가능



예를 들어 애플리케이션 등에서 Access Token을 발행하는 구조를 만드는 경우의 흐름은 다음과 같습니다.
  • OAuth Apps 등록 ⇒ Client ID 및 Client Secret 얻기
  • Client ID를 사용하여 Authorize API로 인증 ⇒ Code 얻기
  • Client ID, Client Secret, Code를 사용해 access_token API를 실행⇒Access Token을 취득
  • 이후 Access Token을 사용하여 리포지토리 작업

  • OAuth로 말하면 OAuth Apps를 등록하는 곳이 권한 서버

    먼저 여기에서 OAuth Apps를 등록합니다.



    이때 Authorization callback URL 이라는 것을 등록합니다만 이것이 특징적입니다. 다음 Authorization API( https://github.com/login/oauth/authorize?client_id=$CLIENT_ID&scope=repo )를 실행하면 해당 응답에 Code가 들어오는 것이 아니라 Authorization callback URL에 code=${code}의 query로 전달됩니다.

    그대로 Access Token이 발행되는 것은 아니고 일단 Code가 클라이언트측이 등록한 어플리케이션에 송신된다고 하는 것이 재미있네요. 쉽게 Access Token이 발행할 수 없도록 가드를 견고하게 하고 싶은 경우에 고려했다든가 그런 느낌일까 예상.

    또, Code는 query로 지정되어 해당 페이지로 리디렉트 되는 형태가 되므로, callback URL용의 서버를 준비하지 않아도, 열심히 query를 들여다 보면 스스로 API를 호출해도 OK입니다.

    Private repository 참조 정보



    Default이면 이 액세스 토큰에서 private repository를 참조할 수 없습니다. 이것은 위의 액세스 토큰 설정 때문입니다.repo: Full control of private repositories 를 설정하면 OK.

    참고 : GitHub API v3에서 프라이빗 리포지토리 정보를 얻지 못하는 문제를 해결하는 방법

    사용 샘플



    GitHub API v3에서 리포지토리를 만들고 파일 커밋 을 참고하겠습니다. 샘플 도구 을 만들었습니다.
    외부 서버에 두고 callback URL에 등록해 두면, https://github.com/login/oauth/authorize?client_id=$CLIENT_ID&scope=repo 의 response로 {"access_token":"yyyy"} 를 취할 수 있습니다.

    시퀀스에 일으키면 이런 느낌이군요.


    Access Token을 받으면 GitHub API v3 사용



    상기의 API 사양서를 보고 있으면, REST 뿐만이 아니라 여러가지 용도가 충실합니다만, 우선 repository의 만드는 방법만 소개. 마찬가지로 GitHub API v3에서 리포지토리를 만들고 파일 커밋 에 자세하게 사용법이 소개되고 있습니다(이미 전부 참고원을 보면 좋지 않을까)

    API 인증은 Access Token을 Authorization: bearer AccessToken에서 HTTP header로 설정하여 이루어집니다.
    후에는 https://api.github.com/user/repos API에 Body로 repository명을 지정해 POST하면 OK입니다.
    curl -H "Authorization: bearer $TOKEN" -X POST \
        -d "{"name":"repository name","auto_init":true or false, "private": true or false}" \
        https://api.github.com/user/repos
    

    일단 이쪽도 샘플 도구 에 스크립트화 해 넣고 있습니다.

    참고



    공식
    GitHub API v3
    Authorizing OAuth Apps

    참고 기사
    GitHub API v3에서 프라이빗 리포지토리 정보를 얻지 못하는 문제를 해결하는 방법
    GitHub API v3에서 리포지토리를 만들고 파일 커밋
    앱 시선에서 GitHub OAuth 이야기 [iOS] OAuth 인증을 극대화 (GitHubAPI에서 배우는 OAuth 인증의 흐름)
    이런 느낌으로 매우 알기 쉽게 정리하고 있었습니다.

    repos.png

    좋은 웹페이지 즐겨찾기