RecordπŸ’½

../jiwon/heoΒ·2024λ…„ 1μ›” 29일
0

HTTP API ν΄λΌμ΄μ–ΈνŠΈ 개발

βœ… μ„œλ²„μΈ‘μ—μ„œ μ œκ³΅ν•˜λŠ” HTTP API와 ν†΅μ‹ ν•˜μ—¬ 데이터λ₯Ό μ†‘μˆ˜μ‹ ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€

1. HTTP λ©”μ„œλ“œ ν™œμš©

  • http ν”„λ‘œν† μ½œμ€ λ‹€μ–‘ν•œ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.
    1) GET : μžμ›μ„ κ²€μƒ‰ν•˜κ±°λ‚˜ κ°€μ Έμ˜€κΈ° μœ„ν•΄ μ‚¬μš©
    2) POST : μƒˆλ‘œμš΄ μžμ›μ„ μƒμ„±ν•˜κ±°λ‚˜ κΈ°μ‘΄ μžμ›μ„ μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•΄ μ‚¬μš©
    3) PUT : μžμ›μ„ μƒμ„±ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•˜κΈ° μœ„ν•΄ μ‚¬μš©, 전체 μžμ›μ„ μ—…λ°μ΄νŠΈ 함
    4) DELETE : νŠΉμ • μžμ›μ„ μ‚­μ œν•˜κΈ° μœ„ν•΄ μ‚¬μš©

2. URI (Uniform Resource Identifier) ꡬ성

  • : API μ—”λ“œν¬μΈνŠΈμ˜ URIλŠ” λͺ…ν™•ν•˜κ³  의미 있게 κ΅¬μ„±λ˜μ–΄μ•Ό ν•œλ‹€. RESTful API의 경우 λ¦¬μ†ŒμŠ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” URIλŠ” 직관적이어야 ν•œλ‹€.

    ❓RESTful API
    1) μžμ› (Resource) : APIλŠ” μžμ›μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λΈ”λ‘œκ·Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” "κ²Œμ‹œλ¬Ό(post)", "μ‚¬μš©μž(user)", "λŒ“κΈ€(comment)" 등이 각각의 μžμ›μ΄ 될 수 μžˆλ‹€.
    2) URI (Uniform Resource Identifier) : 각 μžμ›μ€ κ³ μœ ν•œ URIλ₯Ό κ°–λŠ”λ‹€. URIλŠ” ν•΄λ‹Ή μžμ›μ„ μ‹λ³„ν•˜κ³  μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•œλ‹€. 예λ₯Ό λ“€μ–΄, κ²Œμ‹œλ¬Ό μžμ›μ˜ URIλŠ” "/posts"일 수 μžˆλ‹€.
    3) ν–‰μœ„ (Verb/Method) : μžμ›μ— λŒ€ν•œ ν–‰μœ„λŠ” HTTP λ©”μ„œλ“œ(예: GET, POST, PUT, DELETE)λ₯Ό 톡해 μ •μ˜λœλ‹€. 예λ₯Ό λ“€μ–΄, κ²Œμ‹œλ¬Ό μžμ›μ— λŒ€ν•œ 데이터λ₯Ό κ°€μ Έμ˜€λ €λ©΄ GET λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ³ , μƒˆλ‘œμš΄ κ²Œμ‹œλ¬Όμ„ μƒμ„±ν•˜λ €λ©΄ POST λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.
    4) ν‘œν˜„ (Representation) : μžμ›μ˜ μƒνƒœλŠ” 일반적으둜 JSON λ˜λŠ” XMLκ³Ό 같은 ν˜•νƒœλ‘œ ν‘œν˜„λœλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ μžμ›μ˜ μƒνƒœλ₯Ό μš”μ²­ν•˜λ©΄ μ„œλ²„λŠ” ν•΄λ‹Ή ν‘œν˜„μ„ μ œκ³΅ν•œλ‹€.
    5) μƒνƒœ 전이 (Stateless) : RESTful APIλŠ” μƒνƒœλ₯Ό μ €μž₯ν•˜μ§€ μ•Šκ³ , 각 μš”μ²­ 간에 μƒνƒœλ₯Ό μ „μ΄μ‹œν‚€μ§€ μ•ŠλŠ”λ‹€. 각 μš”μ²­μ€ μ™„μ „ν•˜κ²Œ 독립적이며, λͺ¨λ“  ν•„μš”ν•œ μ •λ³΄λŠ” μš”μ²­ μžμ²΄μ— ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.

3. μš”μ²­κ³Ό 응닡 포맷 처리

  • μ„œλ²„μ™€μ˜ ν†΅μ‹ μ—μ„œλŠ” 주둜 JSON ν˜•μ‹μ„ μ‚¬μš©ν•œλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” μš”μ²­ μ‹œμ— JSON으둜 데이터λ₯Ό μ „μ†‘ν•˜κ³ , 응닡을 JSON으둜 νŒŒμ‹±ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 이λ₯Ό μœ„ν•΄ ν΄λΌμ΄μ–ΈνŠΈ λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ λ‚΄μž₯된 APIλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

4. 비동기 톡신 및 Promise μ‚¬μš©

  • HTTP API ν˜ΈμΆœμ€ 일반적으둜 λΉ„λ™κΈ°μ μœΌλ‘œ 이루어지기 λ•Œλ¬Έμ— 비동기 처리λ₯Ό μœ„ν•΄ Promiseλ‚˜ async/await와 같은 κΈ°μˆ μ„ ν™œμš©ν•œλ‹€. 이λ₯Ό 톡해 λΈŒλΌμš°μ €μ—μ„œ 비동기 μ½”λ“œλ₯Ό 더 κ°„νŽΈν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ‹€.

5. μ—λŸ¬μ²˜λ¦¬

  • λ„€νŠΈμ›Œν¬ 문제, μ„œλ²„ μ—λŸ¬ 등을 κ³ λ €ν•˜μ—¬ μ μ ˆν•œ μ—λŸ¬ 핸듀링을 κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€. μ„œλ²„λ‘œμ˜ μš”μ²­μ΄ μ‹€νŒ¨ν•  경우 ν΄λΌμ΄μ–ΈνŠΈλŠ” 였λ₯˜λ₯Ό 적절히 μ²˜λ¦¬ν•˜κ³  μ‚¬μš©μžμ—κ²Œ μ μ ˆν•œ λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•΄μ•Ό ν•œλ‹€.

6. 인증 및 λ³΄μ•ˆ

  • 인증이 ν•„μš”ν•œ API의 경우 토큰 기반의 인증 방식을 μ‚¬μš©ν•˜κ±°λ‚˜ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ 인증을 μ²˜λ¦¬ν•΄μ•Ό ν•œλ‹€. λ˜ν•œ HTTPSλ₯Ό μ‚¬μš©ν•˜μ—¬ 톡신을 μ•”ν˜Έν™”ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•œλ‹€.

7. 라이브러리 ν™œμš©

  • HTTP ν΄λΌμ΄μ–ΈνŠΈ 라이브러리λ₯Ό μ‚¬μš©ν•˜λ©΄ κ°œλ°œμ„ 더 효율적으둜 ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄, Axios, Fetch API 등이 널리 μ‚¬μš©λ˜λŠ” λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ‹€.

πŸ‘‰ example)

import axios from 'axios';

// GET μš”μ²­
axios.get('/api/data')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error('Error fetching data:', error);
  });

// POST μš”μ²­
axios.post('/api/create', { data: 'example' })
  .then(response => {
    console.log('Data created:', response.data);
  })
  .catch(error => {
    console.error('Error creating data:', error);
  });
profile
virtuous circle : μ‹œλ„ - ꡬ글링 - λ¬Έμ œν•΄κ²° - 반볡

0개의 λŒ“κΈ€