[JS]API & fetch

Hyoyoung Kimยท2022๋…„ 8์›” 18์ผ
0

React TIL

๋ชฉ๋ก ๋ณด๊ธฐ
15/40

๐ŸŽƒAPI

API ํ˜ธ์ถœ

โœ” client๊ฐ€ server์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ(Request)ํ•˜๊ณ  server๊ฐ€ client์—๊ฒŒ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ(Response)ํ•˜๋Š” ๊ณผ์ •
โœ” api๋Š” ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•
โœ” ์ฆ‰,api๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจํ•œํ…Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ธฐ์œ„ํ•ด ๋ง์„ ๊ฑด๋‹ค.

API ํ˜ธ์ถœ์„ ๋น„๋™๊ธฐ ํ˜ธ์ถœ๋กœ ๋ฐ›๋Š” ์ด์œ 

โœ” API ํ˜ธ์ถœ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜๋ฐ›๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‘๋‹ต์„ ์–ธ์ œ ๋ฐ›์„์ง€ ํ™•์‹คํžˆ ์•Œ ์ˆ˜ ์—†๋‹ค.
โœ” ์šฐ๋ฆฌ๊ฐ€ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•ด์ฃผ๋Š” ์‹œ๊ฐ„์€ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ์†๋„, ์„œ๋ฒ„์˜ ๋ถ€ํ•˜์ƒํƒœ ๋“ฑ์— ๋”ฐ๋ผ ์˜ˆ์ƒํ•  ์ˆ˜ ์—†๊ณ , ๋•Œ๋กœ๋Š” ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ(๊ทธ๋ž˜์„œ Promise๊ฐ์ฒด์— reject๊ฐ€ ์žˆ๋Š” ์ด์œ ์ด๊ธฐ๋„ ํ•˜๋‹ค.)๋„ ์žˆ๋‹ค.
โœ” APIํ˜ธ์ถœ์€ ์‘๋‹ต์˜ ์‹œ๊ฐ„์„ ์˜ˆ์ƒํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ(์–ธ์ œ ๋๋‚ ์ง€ ๋ชจ๋ฅด๋‹ˆ๊น) ๋™๊ธฐ ํ˜ธ์ถœ์ด ์•„๋‹Œ Promise ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ํ˜ธ์ถœ๋กœ ์‘๋‹ต์„ ๋ฐ›์•„๋‚ธ๋‹ค.

๐ŸŽƒfetch() - api๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•

API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” JS์—”์ง„ ๋‚ด์žฅํ•จ์ˆ˜

//์‘๋‹ต์„ response๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด์•˜๋‹ค. 
let response = fetch("https://jsonplaceholder.typicode.com/posts").then(
 (res) => {
   console.log(res);
 }
);

โœ” jsonplaceholder์€ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋ฌด๋ฃŒ๋กœ api ํ˜ธ์ถœ์— ๋Œ€ํ•ด์„œ ๋”๋ฏธ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•ด์ฃผ๋Š” ์„œ๋น„์Šค์ด๋‹ค.
โœ” ๋ฌด๋ฃŒ๋กœ ์˜คํ”ˆํ•ด๋†“์€ api๋“ค์„ '์˜คํ”ˆ API'๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
โœ” "https://jsonplaceholder.typicode.com/posts" ๋Š” api๋ฅผ ํ˜ธ์ถœํ• ๋•Œ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋ง์„ ๊ฑธ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ฃผ์†Œ์ด๋‹ค. (๋งํฌ๋ฅผ ํด๋ฆญ์‹œ jsonํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.)

๊ฒฐ๊ณผ๊ฐ’

Response {type: "cors", url: "https://jsonplaceholder.typicode.com/posts", redirected: false, status: 200, ok: trueโ€ฆ}
  type: "cors"
  url: "https://jsonplaceholder.typicode.com/posts"
  redirected: false
  status: 200
  ok: true
  statusText: ""
  headers: Headers
  body: ReadableStream
  bodyUsed: false
  arrayBuffer: ฦ’ arrayBuffer() {}
  blob: ฦ’ blob() {}
  clone: ฦ’ clone() {}
  formData: ฦ’ formData() {}
  json: ฦ’ json() {}
  text: ฦ’ text() {}
  <constructor>: "Response"

์œ„์˜ ๊ฒฐ๊ณผ๊ฐ’์€ json์˜ ๋ฐ์ดํ„ฐ๊ฐ’๊ณผ ๋‹ค๋ฅด๋‹ค.
fetch์˜ return ๊ฐ’์€ API ์„ฑ๊ณต ์ž์ฒด์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š”๋‹ค.
์ฆ‰, API ๋ฐ์ดํ„ฐ์˜ ํŽธ์ง€๋ฅผ ๋ฐ›์€ ๊ฒƒ์ด๋‹ค. ์œ„์˜ ๊ฒฐ๊ณผ๊ฐ’์€ ํŽธ์ง€์˜ ๋‚ด์šฉ์ด ์•„๋‹ˆ๊ณ  ํŽธ์ง€์˜ ๋ด‰ํˆฌ์ด๋‹ค.

๋ด‰ํˆฌ๋ฅผ ๋œฏ์–ด๋ณด์ž(ํŽธ์ง€์˜ ๋‚ด์šฉ์ธ json์˜ ํ˜•์‹์˜ ๊ฐ’์„ ๋œฏ์–ด์˜ค์ž)

async function getData() {
  let rawResponse = await fetch("https://jsonplaceholder.typicode.com/posts");
  let jsonResponse = await rawResponse.json();
  console.log(jsonResponse);
}

getData();
//getDataํ•จ์ˆ˜ ํ˜ธ์ถœ

๊ฒฐ๊ณผ๊ฐ’

์œ„์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ณด๋ฉด jsonํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜จ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€