๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

section28-AJAX์™€API ๋ณธ๋ฌธ

๐Ÿ“’JS/โšกver.0

section28-AJAX์™€API

4:Bee 2023. 4. 3. 17:55
728x90

 

topic explain class
AJAX AJAX formํƒœ๊ทธ์™€ promise๊ฐ€ ๋งŽ์ด ์ƒ๊ฐ์ด ๋‚œ๋‹ค.
AJAX๋Š” ํŽ˜์ด์ง€์— ๋ฐ์ดํ„ฐ๋ฅผ ์š”๊ตฌํ•œ๋‹ค.
ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋”ฉ์ด ๋œ ํ›„ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ
๋‹ค. ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•„์š”ํ•œ ๊ฐœ๋…์€ ํฌ๋งทํŒ…์„ ์•Œ์•„์•ผํ•œ๋‹ค.
AJAX๊ฐœ์š”
API *์•ค๋“œํฌ์ธํŠธ
์š”์ฒญ์„ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ†ต์‹ (?)์ˆ˜๋‹จ(?)๊ฐ™์€ ๊ฒƒ.
JASON๊ณผ ์•„์ฃผ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค.
APIs๊ฐœ์š”
JASON XML์€ ๊ณผ๊ฑฐ์— ๋งŽ์ด ์‚ฌ์šฉํ–‡๋‹ค.
JASON.parse(data)๋ฅผ ์ด์šฉํ•ด์„œ JASON๊ตฌ์กฐํ™” ํ•˜๋ฉด ๋œ๋‹ค.
JASON์ด๋ž€?
//THIS IS A STRING OF JSON (NOT AN OBJECT)
const data = `{"ticker":{"base":"BTC","target":"USD","price":"11288.49813464","volume":"91769.69699773","change":"-46.29462447"},"timestamp":1596510482,"success":true,"error":""}`

// THIS IS A JS OBJECT
const parsedData = JSON.parse(data);
POSTMAN   *Proxy : ํ”„๋ก์‹œ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์‹ ์„ ํ†ตํ•ด์„œ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค์— ๊ฐ„์ ‘์ ์œผ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์ด๋‚˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์— ์ค‘๊ณ„๊ธฐ๋กœ์„œ ๋Œ€๋ฆฌ๋กœ ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€๋ฆฌ์ผœ 'ํ”„๋ก์‹œ', ๊ทธ ์ค‘๊ณ„ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฒƒ์„ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. Using Hoppscotch(or Prostman)

https://hoppscotch.io/
https://www.postman.com/downloads/

{API}
https://swapi.dev/
https://catfact.ninja/
  ๋™์‚ฌ๋งˆ๋‹ค ์—ญํ•  ์ด ๋‹ค๋ฅด๋‹ค.

get, post, put, patch, delete, copy, head, options,link,unlink,purge,lock,unlock,propfind,view
HTTP Verbs(๋™์‚ฌ)
    *๋ฆฌ๋””๋ ‰์…˜
์ฟผ๋ฆฌ๋ฌธ์ž์—ด -> 'q='
HTTP Status Codes
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status

{API}
https://www.tvmaze.com/api
    Headers : ํ—ค๋”์˜ ์—ญํ• ์€?
HTTP ์š”์ฒญ ํ—ค๋”(Headers)๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ HTTP ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ •๋ณด๋“ค์€ ์š”์ฒญ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ์„œ, ์š”์ฒญ์˜ ๋ชฉ์ ์ด๋‚˜ ํŠน์ง•์„ ์„œ๋ฒ„์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
HTTP ์š”์ฒญ ํ—ค๋”์—๋Š” ๋‹ค์–‘ํ•œ ์ •๋ณด๋“ค์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ—ค๋”๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • User-Agent: ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ €๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • Accept: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์„œ๋ฒ„์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • Content-Type: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์„œ๋ฒ„์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  • Authorization: ์ธ์ฆ ํ† ํฐ๊ณผ ๊ฐ™์€ ๋ณด์•ˆ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
์ด ์™ธ์—๋„, ์‚ฌ์šฉ์ž ์ •์˜ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์š”์ฒญ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์š”์ฒญ ํ—ค๋”๋ฅผ ํ™•์ธํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

HTTP Headers
  XHR XHR์ด๋ž€ 
XHR์€ "XMLHttpRequest"์˜ ์•ฝ์ž๋กœ, JavaScript์—์„œ ์„œ๋ฒ„์™€ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” API์ž…๋‹ˆ๋‹ค. XHR์„ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด๋„ ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, AJAX ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋‚ด์šฉ์„ ์„œ๋ฒ„์— ์ „์†กํ•˜๊ณ  ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๋ฐ›์•„์™€์„œ ํŽ˜์ด์ง€๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๊ณ  ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. XHR์€ ์ด์ œ Fetch API์™€ ๊ฐ™์€ ๋‹ค๋ฅธ API๋กœ ๋Œ€์ฒด๋˜์–ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
MakingXHRs
  ๋ฐ์ดํ„ฐ ์š”์ฒญํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๊ธฐ
const req = new XMLHttpRequest();

req.onload = function () {
  console.log("IT LOADED!!")
  console.log(this);
  const data = JSON.parse(this.responseText);
  console.log(data.name, data.height);
}
req.onerror = function () {
  console.log("ERROR!!")
  console.log(this);
}
req.send();


Using The Fetch API then
  .then(res => {
    console.log("RESOLVED!", res);
    res.json().then(data => console.log("JSON DONE", data));
    //JSON.parse()์™€๋Š” ๋‹ค๋ฅด๋‹ค.
  })
  .then((data) => {
    console.log(data);
  })
  .catch(e => {
    console.log("ERROR!", e);
  })
Using The Fetch API
return fetch
  .then(res => {
    console.log("RESOLVED!", res);
    return res.json();
    //JSON.parse()์™€๋Š” ๋‹ค๋ฅด๋‹ค.
  })
  .then((data) => {
    console.log(data);
    return fetch('https://swapi.dev/api/people/2');
  })
  .then((res) => {
    console.log("SECOND REQUEST RESOLVED!!");
    return res.json();
  })
  .then((data) => {
    console.log(data);
    return fetch('https://swapi.dev/api/people/3');
  })
  .then((res) => {
    console.log("THIRD REQUEST RESOLVED!!");
    return res.json();
  })
  .then((data) => {
    console.log(data);
  })
  .catch(e => {
    console.log("ERROR!", e);
  })
awit
const loadStarWarsPeople = async () => {
  try {
    const res = await fetch('https://swapi.dev/api/people/1');
    const data = await res.json();
    console.log(data);
    const res2 = await fetch('https://swapi.dev/api/people/2');
    const data2 = await res2.json();
    console.log(data2);
  } catch (e) {
    console.log("ERROR!!", e);
  }
}
AXIOS
A LIBRARY FOR MAKING HTTP REQUESTS
AXIOS Axios๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ JS์˜ ๋„ค์ดํ‹ฐ๋ธŒ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.
Axios๋Š” HTTP ์š”์ฒญ์˜ ์ƒ์„ฑ๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ ๊ฐ„์†Œํ™”ํ•  ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.
๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋Š” ๋™์ผํ•˜๊ฒŒ ๋ธŒ๋ผ์šฐ์ €์— fetchํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ JS์—์„œ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ถ”๊ฐ€๋กœ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Introducing Axios
https://github.com/axios/axios#installing
const getStarWarsPerson = async (id) => {
  try {
    const res = await axios.get(`https://swapi.dev/api/planets/${id}/`);
    console.log(res.data);
  } catch (e) {
    console.log("ERROR", e);
  }
}
console.log("START!!");//๋จผ์ € ์ฒ˜๋ฆฌํ•œ๋‹ค.

getStarWarsPerson(5);
AXIOS header JASON๊ณผ header์˜ ์—ฐ๊ด€์„ฑ์€?
header์˜ ์˜๋ฏธ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Œ
DOM์ด ์ •ํ™•ํžˆ ๋ญ์ง€? ๋ฐฐ์› ์ง€๋งŒ... ๊ฐœ๋…์ •๋ฆฌ๊ฐ€ ์•ˆ๋˜์–ด ์žˆ์Œ..
Axios๋กœ ํ•ด๋” ์„ธํŒ…ํ•˜๊ธฐ
{API}
https://icanhazdadjoke.com/api
  API๋ฅผ ๋„ˆ๋ฌด ์ž์ฃผ ๋ฐ˜๋ณต(loop)์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ž๋™ํ™”ํ•˜์ง€ ๋ง์•„์•ผํ•œ๋‹ค.  
     

 

728x90
Comments