Open-API / Public-API

5709 ๋‹จ์–ด ReactAPIAPI

[Public-APIs ๊นƒํ—ˆ๋ธŒ] : open API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๋ชจ์•„๋†“์€ ๋งํฌ

Auth

  • apiKey: ํ‚ค(๋กœ๊ทธ์ธ) ํ•„์š”

HTTPS

  • yes: HTTPS๋กœ ๋ฐ์ดํ„ฐ ์š”์ฒญํ•ด์•ผํ•œ๋‹ค.

CORS: Cross Origin Resource Sharing

  • yes : ๋‹ค๋ฅธ origin์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ ์กฐํšŒ ๊ฐ€๋Šฅ!
  • no : ๋ชจ๋ฐ”์ผ์ด๋‚˜ ๋ฐฑ์—”๋“œ ๋“ฑ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ํ™˜๊ฒฝ์—์„œ ์š”์ฒญํ•˜๋ฉด ๊ฐ€๋Šฅ / ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์š”์ฒญ ๋ถˆ๊ฐ€๋Šฅ(๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฐจ๋‹จํ•œ ๊ฒƒ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹Œ ํ™˜๊ฒฝ์—์„œ ์š”์ฒญํ•˜๋ฉด ๋œ๋‹ค. ๋ชจ๋ฐ”์ผ์—์„œ๋Š” ๊ฐ€๋Šฅ)

์‚ฌ์šฉ๋ฐฉ๋ฒ•

rest-API๋ฅผ ์—ฐ์Šตํ•  ์ˆ˜ ์žˆ๋Š” postman์—์„œ ๋ฏธ๋ฆฌ API๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
[postman]
: ํฌ๋กฌ ์›น์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ! (๋ฐ์Šคํฌํƒ‘ ์•ฑ์€ ๊ธ€์ž๊ฐ€ ๊นจ์ง€๊ฑฐ๋‚˜ ๋ฒ„๊ทธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.)

useEffect๋ฅผ ์‚ฌ์šฉํ•˜์ž!

useEffect๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ๋ฐ–์—์„œ setState๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด ํ™”๋ฉด์ด ๋ Œ๋” ๋˜์ž๋งˆ์ž ๊ฐ’์ด ๋ฐ”๋€Œ์–ด์„œ ๋˜ ๋ Œ๋”๋˜๋Š” ๊ฒƒ์ด ๋ฐ˜๋ณต๋œ๋‹ค.
useEffect๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ตœ์ดˆ ํ•œ๋ฒˆ์€ ๋‹ค์‹œ ๋ Œ๋”๋˜๊ฒ ์ง€๋งŒ ๊ทธ ์ดํ›„์—๋Š” ๋‹ค์‹œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

useEffect ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ˜ธ์ถœํ•˜์ž!

useEffect์—๋Š” async๋ฅผ ๋ถ™์ผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  useEffect ์•ˆ์—์„œ ๊ทธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

import axios from "axios";
import { useEffect, useState } from "react";

export default function OpenApiWithUseEffectPage() {
  const [dogUrl, setDogUrl] = useState(""); // ์ด๋ฏธ์ง€ ์ฃผ์†Œ ์ดˆ๊ธฐ๊ฐ’

  //   setDogUrl(result.data.message); 
  // ์ด๋ ‡๊ฒŒ useEffect์— ๋„ฃ์ง€ ์•Š๊ณ  ์“ฐ๋ฉด ์‹คํ–‰๋˜์ž๋งˆ์ž setState ์š”์ฒญ์ด ๊ฐ€๊ณ  ๋ฆฌ๋ Œ๋” ๋˜๊ณ  ๋˜ ์š”์ฒญ์ด ๊ฐ€๊ณ  ๋ฆฌ๋ Œ๋”๋˜๊ณ  ~

  useEffect(() => { // ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜์ž๋งˆ์ž axios๊ฐ€ ์‹คํ–‰๋˜๋„๋ก useEffect๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    // async๋Š” ์—ฌ๊ธฐ๋Š” ์•ˆ ๋ถ™๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ฌด ํ•จ์ˆ˜๋‚˜ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๊ฑฐ๊ธฐ์— async ๋ถ™์—ฌ์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ
    const aaa = async () => {
      const result = await axios.get("https://dog.ceo/api/breeds/image/random");
      setDogUrl(result.data.message); // ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด๋„ ๋ฆฌ๋ Œ๋”๊ฐ€ ํ•œ๋ฒˆ ๋” ์‹คํ–‰๋˜๊ธด ํ•œ๋‹ค.
    };
    aaa();
  }, []);

  return (
    <div>
      <img src={dogUrl} />
    </div>
  );
}

ํ•œ๋‘๊ฐœ๋Š” axios ๋ฐฉ์‹์œผ๋กœ๋„ ๊ดœ์ฐฎ๊ฒ ์ง€๋งŒ,
rest ํ˜•ํƒœ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด GraphQL์„ ํ•  ๋•Œ Apollo Client๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” react query๋ฅผ ์„ค์น˜ํ•ด์„œ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

[React Query]
rest-api๋ฅผ graphQL์—์„œ useQuery(), useMutation() ํ•˜๋“ฏ์ด ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ