Javascript/Javascript

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] web api ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

Rainbow๐ŸŒˆCoder 2022. 4. 24. 17:26
728x90

 

ํ•ด๋‹น ํŒจํ„ด์„ ์ž˜ ๊ธฐ์–ตํ•˜๋ฉด ๋œ๋‹ค.

 

APIํ˜ธ์ถœํ•˜๊ณ  ์‹ถ์„ ๋•Œ

const callAPI = async() =>{
    let url = new URL(`url์ฃผ์†Œ`)
    let header = new Headers({ํ—ค๋”๋‚ด์šฉ}) // ์ด๊ฑด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋งŒ
    let response = await fetch(url,{headers:header})
    let data = await response.json()
}

 

 

<todolist>

- 1. ํฌ๋กฌv8 ์Šคํƒ : url ์ค€๋น„

- 2. ํฌ๋กฌv8 :์Šคํƒ  ํ—ค๋” ์ค€๋น„

- 3. WebApIs๋กœ ๋„˜์–ด๊ฐ : ๋ฐฑ์—”๋“œ, ์„œ๋ฒ„์— ์š”์ฒญ

- 4. ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธ(๋‹จ, 3๋ฒˆ ํ–‰์œ„๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•จ. ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ async/awiat์„ ์ด์šฉ)

 

 

1. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” URL ํด๋ž˜์Šค๋ฅผ new๋กœ ์“ฐ๋ฉด ๋œ๋‹ค.

 

const getLatestNews = () => {
  let url = new URL(
    `https://api.newscatcherapi.com/v2/latest_headlines?countries=KR&topic=sport&page_size=5`
  );
  console.log(url);
};

getLatestNews();

1-1

์•„๋ž˜ ์บก์ฒ˜์™€ ๊ฐ™์ด URL์„ ๋ถ„์„ํ•ด์ค€๋‹ค.

2. ํ—ค๋”์— api-key๋ฅผ ๋‹ฌ์•„์ค€๋‹ค.

const getLatestNews = () => {
  let url = new URL(
    `https://api.newscatcherapi.com/v2/latest_headlines?countries=KR&topic=sport&page_size=5`
  );
  let header = new Headers({'x-api-key':'ํ‚ค ๋ณต์‚ฌํ•ด์„œ ๋„ฃ์œผ๋ฉด ๋จ!'})
  console.log(url);
};

getLatestNews();

3. url๊ณผ header๋ฅผ ๋ถ™์—ฌ์„œ ๋ถ€๋ฅธ๋‹ค.

const getLatestNews = () => {
  let url = new URL(
    `https://api.newscatcherapi.com/v2/latest_headlines?countries=KR&topic=sport&page_size=5`
  );
  let header = new Headers({
    "x-api-key": "ํ‚ค๊ฐ’์„ ๋„ฃ์œผ๋ฉด๋จ",
  });
  let response = fetch(url, { headers: header }); //์‚ฌ์‹ค fetch ๋ง๊ณ  ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
  console.log(response)
};

getLatestNews();

์œ„ ์ฝ”๋“œ 8๋ผ์ธ์—   let response = fetch(url, { headers: header }); //์‚ฌ์‹ค fetch ๋ง๊ณ  ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋ผ๊ณ  ์ž‘์„ฑ,

๋Œ€ํ‘œ์ ์œผ๋กœ ์œ ์šฉํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ajax, http, fetch๊ฐ€ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ€ ์•„์ง ๋„์ฐฉํ•˜์ง€ ์•Š์•˜๋‹ค.

 

4. await ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์—ฌ์ค€๋‹ค. ์•„์ง async ํ‚ค์›Œ๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ž˜ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

const getLatestNews = () => {
  let url = new URL(
    `https://api.newscatcherapi.com/v2/latest_headlines?countries=KR&topic=sport&page_size=5`
  );
  let header = new Headers({
    "x-api-key": "ํ‚ค๊ฐ’์„ ๋„ฃ์œผ๋ฉด๋จ",
  });
  let response = await fetch(url, { headers: header });
  console.log(response);
};

getLatestNews();

๋ง ๊ทธ๋Œ€๋กœ ์ง์—ญํ•˜์ž๋ฉด, await์„ ํ†ตํ•ด์„œ ๊ฐ•์ œ๋กœ  fetch(url, { headers: header }) ํ•จ์ˆ˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

5. ์œ„์— ์“ด await ํ‚ค์›Œ๋“œ๊ฐ€ ์ž˜ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์— async ํ‚ค์›Œ๋“œ๋ฅผ ๋‹ฌ์•„์ค€๋‹ค.

const getLatestNews = async () => {
  let url = new URL(
    `https://api.newscatcherapi.com/v2/latest_headlines?countries=KR&topic=sport&page_size=5`
  );
  let header = new Headers({
    "x-api-key": "ํ‚ค๊ฐ’์„ ๋„ฃ์œผ๋ฉด๋จ",
  });
  let response = await fetch(url, { headers: header });
  console.log(response);
};

getLatestNews();

 

์ˆœ์‹๊ฐ„์— getLatestNews๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๊ฐ€ ๋˜์—ˆ๋‹ค.

์ฝ˜์†” ์ฐฝ๋„ ๊ตฟ๊ตฟ

Response {type: 'cors', url: 'https://api.newscatcherapi.com/v2/latest_headlines?countries=KR&topic=sport&page_size=5', redirected: false, status: 200, ok: true, …} body: ReadableStream bodyUsed: false headers: Headers {} ok: true redirected: false status: 200 statusText: "" type: "cors" url: "https://api.newscatcherapi.com/v2/latest_headlines?countries=KR&topic=sport&page_size=5" [[Prototype]]: Response

 

 body: ReadableStream ๊ฒฐ๊ณผ๋Š” ์•„์ง ์•ˆ ๋ณด์ธ๋‹ค.

 

 

5. Response ๋ฅผ ๋ฐ›์•˜์œผ๋‹ˆ ์—ฌ๊ธฐ์—์„œ JSON ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฝ‘์•„๋‚ด๋Š” ์ž‘์—…์„ ํ•ด์•ผ ํ•œ๋‹ค.(์ธ๊ฐ„์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ณผ์ •)

json์€ ์„œ๋ฒ„ํ†ต์‹ ์—์„œ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹ค.(๊ฐ์ฒด๋ž‘ ๋˜‘๊ฐ™์€๋ฐ text ํƒ€์ž…์ธ..)

const getLatestNews = async () => {
  let url = new URL(
    `https://api.newscatcherapi.com/v2/latest_headlines?countries=KR&topic=sport&page_size=5`
  );
  let header = new Headers({
    "x-api-key": "ํ‚ค๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๋จ",
  });
  let response = await fetch(url, { headers: header });
  let data = response.json();
  console.log(response);
};

getLatestNews();

API DOCUMENT์—์„œ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์‹œ๋“ค๋„ ์ „๋ถ€ json์ด๋‹ค.

json์„ ๋ฝ‘์•„์˜ค๋ฉด ๊ฐ์ฒด์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›น๊ฐœ๋ฐœ์—์„œ ์ฆ๊ฒจ์“ธ ์ˆ˜๋ฐ–์— ์—†๋‹ค.

์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ณ  JSON์œผ๋กœ ๋ฝ‘์•„์˜ค๋Š” ๊ฒƒ์—๋„ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด AWATI ํ‚ค์›Œ๋“œ๋ฅผ ๋‹ฌ์•„์ค€๋‹ค.

const getLatestNews = async () => {
  let url = new URL(
    `https://api.newscatcherapi.com/v2/latest_headlines?countries=KR&topic=sport&page_size=5`
  );
  let header = new Headers({
    "x-api-key": "ํ‚ค๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๋จ",
  });
  let response = await fetch(url, { headers: header });
  let data = await response.json();
  console.log(data);
};

getLatestNews();

.

ํŽผ์ณ๋ณด๊ธฐ : ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ๋ฐ›์•˜๋‹ค!

7. ๊ธฐ์‚ฌ๋งŒ ๋ฐ›์•„์˜ค์ž.

let news = [];
const getLatestNews = async () => {
  let url = new URL(
    `https://api.newscatcherapi.com/v2/latest_headlines?countries=KR&topic=sport&page_size=5`
  );
  let header = new Headers({
    "x-api-key": "ํ‚ค๊ฐ’ ๋„ฃ๊ธฐ",
  });
  let response = await fetch(url, { headers: header });
  let data = await response.json();
  news = data.articles;
  console.log(news);
};

getLatestNews();

์„ฑ๊ณต~!

728x90