Skip to content

[React] GraphQL, axios

Kim Hyewon edited this page Jun 14, 2022 · 4 revisions

GraphQL

What's GraphQL?

  • μš”μ²­ν•˜λŠ” dataλ₯Ό μ„ μ–Έμ μœΌλ‘œ κΈ°μˆ ν•˜λŠ” 쿼리. POST둜 μš”μ²­ν•œ 데이터λ₯Ό λͺ¨λ‘ λ‹΄μ•„ ν•œ μ‘λ‹΅μœΌλ‘œ 돌렀쀌.
  • request의 body뢀뢄에 μ–΄λ–€ μš”μ²­μ„ ν•˜λŠ”κ°€μ— 따라 μˆ˜μ •, μ‚­μ œ μš”μ²­λ„ κ°€λŠ₯ λͺ¨λ‘ POST둜 μš”μ²­ν•¨.

GraphQL query μ˜ˆμ‹œ

μ—¬λŸ¬ depth의 정보λ₯Ό ν•˜λ‚˜μ˜ request둜 μš”μ²­ κ°€λŠ₯

query findRepos($login: String!) {
  user(login: $login) { //λ³€μˆ˜ $login은 μš”μ²­ν• λ•Œ λ‹΄μ•„μ„œ 보냄
    id
    login
    name
    location
    avatar_url: avatarUrl //κ°€μ Έμ˜€λŠ” data alias도 κ°€λŠ₯
    repositories(first: 100) {
      totalCount
      nodes {
        name
      }
    }
  }
}

GraphQL response μ˜ˆμ‹œ

GraphQL은 query둜 μš”μ²­ν•œ μ •λ³΄λ§Œ λ°˜ν™˜ν•œλ‹€.

{
  "data": {
    "user": {
      "id": "MDQ6VXNlcjc5NTkyNjA0",
      "login": "hyew-kim",
      "name": "Kim Hyewon",
      "location": null,
      "avatar_url": "https://avatars.githubusercontent.com/u/79592604?u=9cf807612ce5121bb2018cb4a85b3ff599357128&v=4",
      "repositories": {
        "totalCount": 33,
        "nodes": [
          {
            "name": "prgrms-fejs"
          },
          {
            "name": "42_piscine"
          },
          {
            "name": "printf"
          }, ...
       ]}
     }
   }
}

Axios

What's Axios?

  • Promise 기반의 HTTP 비동기 톡신 라이브러리, HTTP methodλͺ¨λ‘ 지원
  • μΈμŠ€ν„΄μŠ€ μ»€μŠ€ν…€ μ„€μ • κ°€λŠ₯
  • μš”μ²­ μ·¨μ†Œ 및 νƒ€μž„μ•„μ›ƒ μ„€μ • κ°€λŠ₯

μ‚¬μš©λ²•

bodyκ°€ μ•„λ‹Œ data속성 μ‚¬μš©

  • axios.get(url,[,config])
  • axios.post(url[,data[,config]])
  • axios.delete(URL,[,config])
  • axios.put(url[, data[, config]])

response

μžλ™μœΌλ‘œ JSONν˜•μ‹μœΌλ‘œ λ³€ν™˜λ˜μ–΄ responseκ°€ μ˜¨λ‹€. statusκ°€ 200이고 statusTextκ°€ β€˜OK’이면 성곡이닀.

{
  // `data`λŠ” μ„œλ²„κ°€ μ œκ³΅ν•œ 응닡(데이터)μž…λ‹ˆλ‹€.
  data: {},

  // `status`λŠ” μ„œλ²„ μ‘λ‹΅μ˜ HTTP μƒνƒœ μ½”λ“œμž…λ‹ˆλ‹€.
  status: 200,

  // `statusText`λŠ” μ„œλ²„ μ‘λ‹΅μœΌλ‘œ λΆ€ν„°μ˜ HTTP μƒνƒœ λ©”μ‹œμ§€μž…λ‹ˆλ‹€.
  statusText: 'OK',

  // `headers` μ„œλ²„κ°€ 응닡 ν•œ ν—€λ”λŠ” λͺ¨λ“  헀더 이름이 μ†Œλ¬Έμžλ‘œ μ œκ³΅λ©λ‹ˆλ‹€.
  headers: {},

  // `config`λŠ” μš”μ²­μ— λŒ€ν•΄ `axios`에 μ„€μ •λœ ꡬ성(config)μž…λ‹ˆλ‹€.
  config: {},

  // `request`λŠ” 응닡을 μƒμ„±ν•œ μš”μ²­μž…λ‹ˆλ‹€.
  // λΈŒλΌμš°μ €: XMLHttpRequest μΈμŠ€ν„΄μŠ€
  // Node.js: ClientRequest μΈμŠ€ν„΄μŠ€(λ¦¬λ””λ ‰μ…˜)
  request: {}
}

참고 자료