LOL_API를 활용하여 Next.js로
챔피언 정보, 아이템 정보, 로테이션 챔피언 정보를 뿌려주는 과제를 받았다.
지금은 끊었지만 이전에는 롤을 즐겨 했기 때문에 좀 반가웠다 ㅎㅎ
https://teamsparta.notion.site/React-6-CH-5-Riot-API-10c2dc3ef51480099a60d96a119769bf
일단 어마어마한 양의 가이드
익숙해져야하지만.. ㅜ 읽기 싫다
여튼 어짜피 한번에 다 완벽하게 파악하기 힘드니,
두 번 정도 읽고 대강 흐름만 파악하고
위에서부터 차례대로 쳐내면서 막히는 부분의 가이드를 다시 읽는 형태로 진행해보겠다.
이렇게 순서가 나왔고, 차례대로 시작해보자.
이전 API데이터를 가져오는 방식과 달라 이 부분에서 좀 헤맸다.
이전에는 todos [{},{},[]]이런식으로 뿌려줬기 때문에 가져오기 수월했지만, 객체 데이터로 와서 배열로 반환해야했다.
Object.values를 이용하여 배열로 반환
객체데이터
{
"data"{
{"Aatrox": {객체}}
{"Ahri": {객체}}
{"Akali": {객체}}
}
}
챔피언 부분은
각 챔피언의 ID를 문자열 키로 사용하고,
그에 해당하는 객체 중 필요한 데이터만 ChampionType으로 정의했다.

챔피언과 아이템은 API키를 활용하지 않아도 되니 먼저 데이터를 뿌려주었는데 정상적으로 뿌려지는것을 확인할 수 있었다.
4-1. 챔피언 정보 뿌려주기

위의 이미지처럼
fetch를 이용하여 구현해보았는데
axios 를 사용하는것이 좋을까 싶어 두 가지의 장단점을 간단히 정리해보았다.
Axios 장점
지금 해당 코드에서는 단순 get요청이기 때문에 Axios를 설치하여 불필요한 의존성을 추가하는 것이 좋을까 싶어서 일단은 간단한 fetch로 두겠다.
4-2. 아이템 정보 뿌려주기
마찬가지로 아이템도 API키를 사용하지 않아,
위의 챔피언 정보를 뿌려준 것과 비슷한 방식으로 구현하였다.
4-3 로테이션 챔프 정보 뿌려주기
이 부분은 API키가 필요하다.
일단 어떤 아이디가 로테이션 챔프에 해당되는지를 먼저 가져와보겠다.
공식 문서를 참고하여 뿌려주는 데이터 구조를 확인해보면
아래 이미지의 형태로 되어있다.

위의 이미지를 참고하여 type을 정의해보겠다.

챔피언 로테이션 챔프 아이디를 가져오는 로직
const getChampionRotation = async():Promsie<ChampionRoatationData | null> => {}
먼저 이 부분은 async이기 때문에 반환값은 Promise이고,
함수가 반환하는 Promsie의 타입은
위에서 정의한 으로 정의했다.
성공 시 ChampionRotationData타입의 데이터를 반환하고 실패 시 null을 반환한다.
이 부분에서 null을 해주는 이유는
함수가 실패했음을 명시적으로 나타내기 위함이며,
단순히 return 으로 하면 undefined를 반환하게 된다.
또한 빈환 값을 통해 오류를 감지 할 수 있다.
ex) if(rotationData === null) {}
또한 RIOT_API_KEY가 없을때에는 null을 리턴하고
키가 있다면, try를 실행하여 헤더에 토큰 정보를 넣어 요청을하여
해당 데이터를 받아온다.
catch하여 에러처리를 해주었다.
일단 여기까지 완료하였고,
불러온 로테이션 아이디와 일치하는 챔피언 정보를 뿌려주는 것은
다음에 이어서 추가로 작성해보겠다.