[ํฌ์ผ๋ชฌ ๋๊ฐ ํ๋ก์ ํธ] #6 – ๐งฌ PokéAPI์์ ์งํ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
๐ [ํฌ์ผ๋ชฌ ๋๊ฐ ํ๋ก์ ํธ] #6 – ๐งฌ PokéAPI์์ ์งํ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
๐ฏ ๋ชฉํ
์์ธ ํ์ด์ง์์ ํด๋น ํฌ์ผ๋ชฌ์ ์งํ ํธ๋ฆฌ๋ฅผ ๋ณด์ฌ์ค๋ค!
์: ํผ์นด์ธ → ๋ผ์ด์ธ, ํ์ด๋ฆฌ → ๋ฆฌ์๋ → ๋ฆฌ์๋ชฝ
โ API ํ๋ฆ ์ ๋ฆฌ
PokéAPI์์ ์งํ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด 3๋จ๊ณ๋ก ๊ตฌ์ฑ๋ API ์์ฒญ์ ๊ฑฐ์ณ์ผํ๋ค.
1. `pokemon-species` → `evolution_chain` URL ํ์ธ
2. `evolution-chain` → ์งํ ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
3. ์ฌ๊ท ๊ตฌ์กฐ๋ฅผ ํ์ฑํ์ฌ ์งํ ๋ฆฌ์คํธ ์์ฑ
ํ์ api ๋ฆฌ์คํธ | |
species.url(์ข ์ ๋ณด) | https://pokeapi.co/api/v2/pokemon/{name} |
evolution_chain.url | https://pokeapi.co/api/v2/pokemon-species/{name} |
์งํ ํธ๋ฆฌ | https://pokeapi.co/api/v2/evolution-chain/{id} |
๐ก ์งํ๋ฆฌ์คํธ fetch ํจ์
evolution_chain์ api๋ ์์ ๊ฐ์ด ๋ณต์กํ ์ค์ฒฉ ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
์ต์ข
์ ์ผ๋ก ๋ฐ์ดํฐ๋ ['bulbasaur', 'ivysaur', 'venusaur'] ์ ๊ฐ์ ์งํ ๋ค์ ๋ฐฐ์ด์ด ํ์!!
// ํ์
์ ํด๋นํ๋ ํฌ์ผ๋ชฌ ๋ฆฌ์คํธ ๊ฐ์ ธ์ค๊ธฐ
export const fetchPokeEvoChain = async (name: string) => {
{/* ... */}
let evoChain: string[] = [];
const evoNames = (obj: any) => {
if (!obj) return evoChain;
evoChain.push(obj.species.name);
if (obj.evolves_to && obj.evolves_to.length > 0) {
return evoNames(obj.evolves_to[0]);
}
return evoChain;
};
evoNames(evoRes.chain);
return evoChain;
};
- chain.species.name
- chain.evolves_to[0].species.name
- chain.evolves_to[0].evolves_to[0].species.name
๐ evolution_chain์ api์์ ์์ ๊ฐ์ 3๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ๊ตฌํ๋๋ฐ evolves_to๊ฐ ๊ณ์ ์ค์ฒฉ๋๋ฏ๋ก ์ผ๋ฐ์ ์ธ ๋ฐ๋ณต๋ฌธ์ ๋ณต์กํด์ง๋ค๊ณ ์๊ฐ, ์ฌ๋ฌ ๋ฐ๋ณต๋ฌธ์ ์ฐพ์๋ณด๋ค๊ฐ ์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํด ๊ฐ๋จํ๊ฒ ์ฐ๋ ๋ฐฉ๋ฒ์ ์ฑํํ๊ฒ ๋์๋ค.
๐ ์์ธ ํ์ด์ง ๋ ๋๋ง
Error: Route "/pokemon/[name]" used `params.name`. `params` should be awaited before using its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis
at PokemonDetail (src/app/pokemon/[name]/page.tsx:10:52)
// /[name]/page.tsx
const { name } = await params;
const data = await fetchPokemonDetail(name);
const evolutions = await fetchPokeEvoChain(name);
๐ page.tsx์์ ์๋ฒ๋ ๋๋ง์ผ๋ก params๋ฅผ ๋ถ๋ฌ์ฌ๋ ๋น๋๊ธฐ๋ก ํธ์ถ์ด ๋๊ธฐ ๋๋ฌธ์ async await ์ ์ฌ์ฉํด์ ๋๊ธฐ์ ์ผ๋ก ์จ์ผํ๋ค.
๐ ๊ฒฐ๊ณผ
๐ง ์ค๋์ ํ๊ณ
์ด๋ฒ ํธ์์๋ ๋ณต์กํ ์ค์ฒฉ ๊ตฌ์กฐ์ api๋ฅผ ๋ถ๋ฌ์ค๋ฉด์ ์ฌ๋ฌ ํจ์๋ฅผ ๋น๊ตํด์ ์ฌ์ฉํ๋ฉด์ ๋ฐ๋ณต๋ฌธ์ ๋ํ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฒ ๋์๊ณ , ๋ณต์กํ ์ค์ฒฉ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ํ์ด๋๊ฐ์ผ ํ ์ง ์ข ๋ ๊ณต๋ถํด์ผ ๋๊ฒ ๋ค๊ณ ๋๊ผ๋ค.
๐ ๋ค์ ๋ชฉํ
- ๊ฒ์ ๊ธฐ๋ฅ
- ์งํ ๊ฒฝ๋ก ๊ฐ์กฐ
- ์ ๋๋ฉ์ด์ ํจ๊ณผ ๋ฑ๋ฑ