Github API 다루기
11879 단어 github apigithub api
Github API를 통한 유저의 Repository 받아오기, 선택한 Repository의 issue 모아보는 기능을 만들어봤습니다.
아래 깃헙 링크를 통해 clone으로 직접 사용해보실수 있습니다.
깃헙 링크
repository
아래는 Repository를 불러오는 코드입니다.
await axios
.get(`https://api.github.com/users/${username}/repos`, {
headers: {
Accept: "application/vnd.github.nightshade-preview+json",
// Authorization: `Token b6b4269b1...`,
},
})
.then((el) => changeHandler(el.data));
위 코드에 changeHandler는 prop로 받아온 핸들러입니다.
const changeHandler = (data) => {
const repoData = JSON.stringify(data);
localStorage.setItem("repoData", repoData);
setToggle(!toggle);
};
핸들러에 data를 전달하면 data를 로컬스토리지에 repoData란 이름으로 저장해줍니다.
URL은 다음과 같습니다
https://api.github.com/users/$유저이름/repos
issue
아래는 issue를 불러오는 코드입니다.
// repoRegister 개수만큼 요청 후 해당 이슈만큼 map으로 뿌려줌
useEffect(() => {
// 처음 불러올때 초기화
let temp = [];
const username = localStorage.getItem("username");
const repoRegister = JSON.parse(localStorage.getItem("repoRegister"));
if (repoRegister) {
const getRepo = async () => {
for (let i = 0; i < repoRegister.length; i++) {
let url = `htts://api.github.com/repos/${username}/${repoRegister[i].name}/issues`;
await axios
.get(url, {
headers: {
Accept: "application/vnd.github.nightshade-preview+json",
},
})
.then((res) =>
res.data.forEach((el) => {
el.repo = repoRegister[i].name;
temp.push(el);
})
);
}
setLoading(!loading);
setIssue(temp);
};
getRepo();
}
}, []);
- 로컬스토리지에 저장된 username(계정명)과 repoRegister(등록된 레포지토리) 두개는 issue요청할 URL에 사용되야하기에 불러와줍니다.
그리고 임시로 issue들을 담아놓을 배열도 선언해줍니다.
issue를 요청할 url은 다음과 같습니다.
https://api.github.com/repos/유저이름/레포지토리이름/issues
-
한 페이지에 저장된 모든 Repository들의 issue를 보여줘야하기에 위처럼 for문을 사용해서 Repository 개수만큼 요청해줍니다.
-
header에 Accept 요청 까먹지 말고 넣어주고 요청해서 받아온 것들은 임시로 만든 배열에 추가해줍니다.
-
모든 반복이 끝났다면 임시로 만든 배열을 상태로 관리하고 있는 issue 배열에 넣어줍니다.
로딩도 끝내주세요.
setLoading(!loading);
setIssue(temp);
- 이 모든걸 useEffect로 덮어주고 repoRegister가 있을때만 동작하게 조건문을 걸어놓는다면 완성입니다.
참조
Author And Source
이 문제에 관하여(Github API 다루기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kusdsuna/Github-API-다루기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)