버전 업데이트 플러그인 개발 - Github API (1) - 준비사항 정보
그누보드5 버전 업데이트 플러그인 개발 - Github API (1) - 준비사항본문
처음 버전 업데이트 기능을 담당해서 개발할 때, 전임자가 작업해놓은 코드와 처음 보는 API로 인해서 많은 시행착오들을 겪으면서 개발을 했었습니다. (물론 지금도 권한관련 문제를 해결하려고 노력 중입니다 ㅠㅠ)
앞으로 Github API를 활용할 분들과 저와 동일한 문제를 겪으신 분들을 위해서
1. 준비사항 & 토큰 적용
2. 활용한 Github API 기능
두가지에 대해서 부족한 필력이지만 강좌 글을 남깁니다.
Github API는 다양한 기능들을 제공하고 있으며 버전 업데이트 플러그인도 일부를 활용해서 개발되었습니다.
기본적으로 별다른 인증과정 없이 사용할 수도 있지만 시간 당 60번의 요청제한이 있습니다.
그러므로 개인 엑세스 토큰(PAT)을 발급받아서 요청제한을 늘리시는 것을 권장합니다.
Github API를 활용하기 위한 준비 - 토큰 발급
토큰에는 두가지 종류가 있습니다.
- Fine-grained personal access tokens
- 공개된지 얼마 안된 토큰으로, PAT에 부여하는 권한 및 저장소 액세스를 세부적으로 제어할 수 있으므로 보안성이 향상되었다고 합니다.
- personal access tokens (classic) (PAT)
저 같은 경우는 gnuboard5 repository가 공개이기 때문에 권한&범위를 설정하지 않았고 둘 중 아무거나 발급받아도 정상적으로 사용 가능했습니다. 다른 저장소를 사용하실 경우, 적절한 권한&범위를 설정해야 합니다.
토큰 생성 방법
1. Settings -> Developer setting -> Personal access tokens
2. Fine-grained tokens, Tokens(classic) 중 1개를 선택해서 발급
- Fine-grained personal access tokens
- Generate new token 버튼 클릭
- Expiration(유효기간/필수), Token name(토큰 이름/필수), Description(토큰 설명/선택) 입력
- Repository access > Public Repositories (read-only) 선택 (디폴트)
- Permissions > 선택하지 않음
- Generate token (토큰생성) 버튼 클릭
토큰 발급 화면
토큰 발급 결과
- Personal Access Tokens (classic)
- Generate new token 버튼 클릭 > Generate new token (classic) 선택
- Expiration(유효기간/필수), Note(토큰 이름/필수) 입력
- Select scopes (토큰 범위) > 선택하지 않음
- Generate token (토큰생성) 버튼 클릭
토큰 발급 화면
토큰 발급 결과
- 생성 후 나오는 토큰 값은 다시 확인 할 수 없으므로 따로 메모하거나 저장해둬야 합니다. (잃어버려도 새로 재발급해서 사용해도 되지만 번거롭습니다)
- 범위가 지정된 토큰은 개인 repository에 접근할 수 있으므로 공개되지 않도록 주의가 필요합니다.
- 실수로 저장소에 토큰 값이 push됬을 때 자동으로 만료되어 사용할 수 없습니다.
- Github API 개인 엑세스 토큰 생성 참고
Github API를 활용하기 위한 준비 - cURL 설정
cURL을 사용해서 API 요청을 하기 전, 발급 받은 토큰을 적용하고 간단한 설정을 해야합니다.
토큰 적용
API 요청 Header에 Authorization 속성 값으로 토큰 값을 추가해줍니다.
- 예시 : Authorization: token {발급받은 토큰}
User Agent 설정
User-Agent 헤더 값으로 GitHub 사용자 이름 또는 애플리케이션 이름을 추가해야 합니다.
- 예시 : curl_setopt($ch, CURLOPT_USERAGENT, "gnuboard");
- Github API > Overview > User agent required 참고
예시
그누보드5 Github 저장소의 최신 릴리즈 1건의 정보를 불러오는 예시입니다.
Github API 요청 소스코드
/* Github API Test */
$ch = curl_init();
$header = array();
$githubToken = "{Github Token 입력}";
$url = "https://api.github.com/repos/gnuboard/gnuboard5/releases?per_page=1";
if (!empty($githubToken)) {
array_push($header, "Authorization: token {$githubToken}");
}
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_USERAGENT, "gnuboard");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 3600);
$response = curl_exec($ch);
echo "<pre style='font-size:1.4em'>";
print_r(json_encode(json_decode($response), JSON_PRETTY_PRINT));
echo "</pre>";
/* Github API Test */
실행결과
다음 장에서는 버전 업데이트에서 활용한 Github API 기능에 대해서 설명하도록 하겠습니다.
!-->8