마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

github api 중 질문

0 추천
안녕하세요 git app 을 만들려고합니다.

자신이 로그인하고, 로그인한 계정에서 자신이 star를 눌른 repo가 있다면 그 repo에 눌렀다는 표시를 넣고싶은데

혹시 관련 api가 있을까요?
hifl (670 포인트) 님이 2022년 4월 5일 질문
hifl님이 2022년 4월 6일 수정
git app이  Github.com을 말씀하시는 건가요, 아니면 말 그래도 git  자체를 말씀하시는 건가요?
죄송합니다. 제가 질문을 횡설수설하게 적었네요
github api를 활용한 앱입니다.
먼저 user repository list를 가져온 후
자신이 star를 눌렀는지 안눌렀는지 확인 후 안눌렀으면
check하는 기능을 만들 고 싶습니다.
제가 찾아본 결과 star를 누르는 api 따로 list를 가져온 api 가 따로 있어 ,이 부분을 어떡해 만들어야할지 갈피를 못잡아 질문드립니다!

1개의 답변

+1 추천
아래가 해당 API 페이지인 것 같은데, 맞는지 모르겠네요.

https://docs.github.com/en/rest/reference/activity#list-repositories-starred-by-a-user

일단 API를 기능별로 만드세요.

startRepository
unstartRepository
getStarredRepositories

사용자가 star를 주게 되면 startRepository를 호출한 다음, 성공하면 getStarredRepositories를 호출하여 리스트를 갱신하고 에러가 나면 에러메세지를 보여주세요.

unstar도 동일하게 하시면 되구요.

만약 API 자체는 이해가 가셨는데, 코드를 작성하는게 문제라면 Android 에서 어떻게 http요청을 처리하는지 공부하시면 됩니다.

해당 코드를 다 보여드리기는 엄청 길기 때문에 힘들구요,

먼저 구글에 아래와 같은 키워드로 찾아보세요.

how to handle http request in Android

검색된 결과들을 클릭해보면 아마도 몇가지 라이브러리를 추천해 줄 텐데, 제일 많이 사용하는 건 Retrofit입니다.

Retrofit에 관해서는

https://futurestud.io/

위의 사이트의 튜토리얼이 제일 정리가 잘 된 것 같더군요.

그리고 github을 찾아 보시면 샘플코드가 많습니다.

Android github api sample github

정도로 검색해보시면 됩니다.
spark (226,420 포인트) 님이 2022년 4월 5일 답변
감사합니다. 시도해볼게요!
안녕하세요, 말씀하신 대로 개발하는 와중 궁금한게 생겨 질문 드립니다.
저는 getStarredRepositories 가 아닌

searchRepository
https://docs.github.com/en/rest/reference/search
userRepository
https://docs.github.com/en/rest/reference/repos
로 개발해야하는 상황입니다.

이런 경우에는 star 눌른 api만 가져올 수 없으므로
개발하기 어려울가요?
제가 github api 전문가가 아니라서 원하시는 API가 존재하는지 모르겠는데, 주어진 정보로만 볼 때는 search를 통해서는 starred repository를 알 수 없는 것 같네요. starred repository를 가져오는 api를 한번 호출해 주고 search 하게 되면 두개를 비교해서 starred repository에 검색결과에 있는 repository가 존재하는지 체크해야 할 것 같아 보이네요. 아래와 같은 식으로...
List<Repository> starredRepos = getStarredRepositories();

List<Repository> searchedRepos =  searchRepository();
for (Repository repository : searchedRepos) {
    if (starredRepos.contains(repository)) {
          // Do something()
    }
}
만약 여러 요청을 한꺼번에 처리하고 싶다면 GraphQL를 사용하실 수 있어요.
https://docs.github.com/en/graphql

아래 페이지에서 GraphQL이 어떻게 동작하는지 테스트해볼 수 있습니다.
https://docs.github.com/en/graphql/overview/explorer

아마도 님의 경우에 적합할 듯 합니다.
GraphQL은 좀 ㅠㅠ 어려울 것 같아요
...