2020. 9. 10. 09:25ㆍ개발/GO
이 글은 api.github.com 을 이용해서
특정 repo의 releases 정보를 가져오는 작은 개발을 공유하고 있습니다.
사용하고 있는 패키지가 많아짐에 따라,
내가 모르는 사이에 버전이 올라가는 케이스도 많고
그 변경점을 찾아보는게 쉽지가 않은 세상입니다.
다행히 최근에는 많은 곳에서 git을 이용해 패키지를 관리하고
releases를 통해 버전과 변경점을 공유하고 있는데요.
예전부터 이 부분을 자동으로 가져와야겠다고 생각하다가
이번에 Go를 통해 만들기 시작했습니다.
api.github.com
api.github.com 에 접속하면 간단한 api.github의 사용법이 나옵니다.
각각의 url로 들어가면 정보와 또 다른 url 사용법이 나오기 때문에 하나씩 찾아들어가서 내가 원하는 정보를 찾아봐도 재미있습니다.
저는 제가 좋아하는... github.com/laravel/framework 의 정보를 가져오려고 합니다.
그리고 최신 releases 정보를 가져오기 위해 api.github.com/repos/laravel/framework/releases 를 이용하려고 합니다.
Go 에서 api 정보 가져오기
저는 Postman을 이용해서 기본 코드를 가져올 수 있었습니다.
아직 저에게는 Go가 익숙하지 않아서 기본적인 코드도 막상 짜려면 쉽지 않더라구요.
Postman 으로 일단 확인해 본 후,
우측 상단에 Code를 눌러서 원하는 language의 snippet을 가져올 수 있습니다.
Go 에서 list 관리하기
저는 하나의 repo가 아니라 여러개의 repo를 확인하고 싶었기 때문에 url을 여러개 확인할 필요가 있었습니다.
그래서 list로 관리를 하려고 했는데 처음에는 map을 사용했습니다.
(결국 나중엔 struct로 변경하기는 했습니다.)
gitList := make(map[string]string)
gitList["LARAVEL"] = "https://api.github.com/repos/laravel/framework/releases"
gitList["SOME"] = "https://api.github.com/repos/owner/repos/releases"
for index, value := range gitList {
getApi(index, value)
}
참고로 getApi에는 postman 에서 작성한 코드가 있는 함수입니다.
Published 시간을 참고하여 webhook 보내기
api를 보면 published_at 항목이 있는데,
저는 이 날짜를 참고하여 최근 24시간 안에 올라온 release면 알림을 받으려고 했습니다.
24시간을 검사하기 위해서는 now를 이용했습니다.
now := time.Now()
if now.Sub(d.PublishedAt).Hours() < 24 {
doWebHook(d)
}
후기
이정도로만 해도 제가 원하는 기능은 만들어볼 수 있었습니다.
그런데 좀 더 편하게 사용하기 위한 욕심이 생기는 바람에,
- list를 관리할 수 있는 html 페이지 추가 (이 때문에 map을 struct로 변경했습니다.)
- aws lambda 로 올릴 수 있도록 준비
이정도는 추가로 준비하고 있습니다.
기회가 되면 추가로 준비한 부분까지 공유를 해보도록 하겠습니다.
감사합니다.
'개발 > GO' 카테고리의 다른 글
Go, AWS S3에 파일 올리고 다운받기 (0) | 2020.09.17 |
---|