포슀트

REST API

REST API

πŸ’« REST API


🫧 API

  • Application Programming Interface
  • μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ‹€λ₯Έ μ‘μš© ν”„λ‘œκ·Έλž¨μ„ μ œμ–΄ν•  수 있께 λ§Œλ“  μΈν„°νŽ˜μ΄μŠ€
  • APIλ₯Ό μ‚¬μš©ν•˜λ©΄ λ‚΄λΆ€ κ΅¬ν˜„ λ‘œμ§μ„ μ•Œμ§€ λͺ»ν•΄λ„ μ •μ˜λ˜μ–΄ μžˆλŠ” κΈ°λŠ₯을 μ‰½κ²Œ μ‚¬μš©ν•  수 있음

  • μ—¬κΈ°μ„œ μΈν„°νŽ˜μ΄μŠ€λŠ” μ–΄λ–€ μž₯μΉ˜κ°„ 정보λ₯Ό μ£Όκ³  λ°›λŠ” 방법을 λ§ν•œλ‹€.
  • i.e. 마우슀, ν‚€λ³΄λ“œ, ν„°μΉ˜νŒ¨λ“œ

🫧 REST

  • Representational State Transfer, μžμ› μƒνƒœ 전달?
  • μžμ›μ„ μ΄λ¦„μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ μžμ›μ˜ μƒνƒœλ₯Ό κ΅ν™˜ν•˜λŠ” 것을 의미
  • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ 톡신 방식 쀑 ν•˜λ‚˜

  • HTTP URIλ₯Ό 톡해 Resource을 λͺ…μ‹œν•˜κ³ ,
  • HTTP Methodλ₯Ό 톡해 ν•΄λ‹Ή Resource에 λŒ€ν•œ CRUD Operation을 μ μš©ν•˜λŠ” 것
    • μžμ›μ„ κ΅ν™˜ν•˜λŠ” 것
  • κ·Έ κ²°κ³Όλ₯Ό HTTP Status Code둜 μ‘λ‹΅ν•˜λŠ” 것

🫧 Resource

  • Collection : 볡수의 μžμ›μ„ κ°€λ¦¬ν‚€λŠ” μžμ›
    • https://api.example.com/topics
  • Element : λ‹¨μˆ˜μ˜ μžμ›μ„ κ°€λ¦¬ν‚€λŠ” μžμ›
    • https://api.example.com/topics/1234
    • https://api.example.com/topics/rest-api

🫧 Method

  • CRUD Operation
    • Create : POST
    • Read : GET
    • Update : PUT, PATCH
    • Delete : DELETE

🫧 REST νŠΉμ§•

  • Server-Client ꡬ쑰
    • μžμ›μ΄ μžˆλŠ” μͺ½μ΄ Server, μžμ›μ„ μš”μ²­ν•˜λŠ” μͺ½μ΄ Client
    • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°€ λ…λ¦½μ μœΌλ‘œ λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄μ•Ό 함
  • Stateless
    • μš”μ²­ κ°„μ˜ ν΄λΌμ΄μ–ΈνŠΈ 정보가 μ„œλ²„μ— μ €μž₯λ˜μ–΄μ„œλŠ” μ•ˆλ¨ (κ·œμΉ™)
    • μ„œλ²„λŠ” 각 μš”μ²­μ„ μ™„μ „νžˆ λ…λ¦½μ μœΌλ‘œ μ²˜λ¦¬ν•΄μ•Ό 함
    • 이전 μš”μ²­μ΄ λ‹€μŒ μš”μ²­μ— 영ν–₯을 μ£Όλ©΄ μ•ˆλ¨
  • Cacheable
    • ν΄λΌμ΄μ–ΈνŠΈλŠ” 응닡을 μΊμ‹œν•  수 μžˆμ–΄μ•Ό 함
      • HTTP ν”„λ‘œν† μ½œμ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— HTTP의 νŠΉμ§•μΈ 캐싱 κΈ°λŠ₯을 μ‚¬μš©ν•  수 있음
    • λŒ€λŸ‰μ˜ μš”μ²­μ„ 효율적으둜 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μΊμ‹œλ₯Ό μ‚¬μš©
  • 계측화 (Layered System)
    • ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ ꡬ성과 상관없이 REST API μ„œλ²„λ‘œ μš”μ²­
    • μ„œλ²„λŠ” 닀쀑 κ³„μΈ΅μœΌλ‘œ ꡬ성될 수 있음 (λ‘œλ“œ λ°ΈλŸ°μ‹±, λ³΄μ•ˆ μš”μ†Œ, μΊμ‹œ λ“±)
  • Code on Demand (Optional)
    • μš”μ²­μ„ λ°›μœΌλ©΄ μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ μ½”λ“œ λ˜λŠ” 슀크립트(둜직)을 μ „λ‹¬ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ κΈ°λŠ₯ ν™•μž₯
  • μΈν„°νŽ˜μ΄μŠ€ 일관성 (Uniform Interface)
    • 정보가 ν‘œμ€€ ν˜•μ‹μœΌλ‘œ μ „μ†‘λ˜κΈ° μœ„ν•΄ ꡬ성 μš”μ†Œκ°„ 톡합 μΈν„°νŽ˜μ΄μŠ€λ₯Ό 제곡
    • HTTP ν”„λ‘œν† μ½œμ„ λ”°λ₯΄λŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜κ²Œλ” 섀계

🫧 REST μž₯점

  • HTTP ν‘œμ€€ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ ν˜Έν™˜κ°€λŠ₯
  • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 역할을 λͺ…ν™•ν•˜κ²Œ 뢄리
  • μ—¬λŸ¬ μ„œλΉ„μŠ€ μ„€κ³„μ—μ„œ 생길 수 μžˆλŠ” 문제λ₯Ό μ΅œμ†Œν™”

🫧 REST API

  • REST μ•„ν‚€ν…μ²˜μ˜ 쑰건을 μ€€μˆ˜ν•˜λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€
  • RESTful : REST μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬ν˜„ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€

🫧 REST API νŠΉμ§•

  • REST 기반으둜 μ‹œμŠ€ν…œμ„ λΆ„μ‚°ν•˜μ—¬ ν™•μž₯μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ λ†’μž„
  • HTTP ν‘œμ€€μ„ λ”°λ₯΄κ³  μžˆμ–΄ μ—¬λŸ¬ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘œ κ΅¬ν˜„ν•  수 있음

🫧 REST API 섀계 κ·œμΉ™

  • μ›ΉκΈ°λ°˜μ˜ REST APIλ₯Ό 섀계할 κ²½μš°μ—λŠ” URIλ₯Ό 톡해 μžμ›μ„ ν‘œν˜„ν•΄μ•Ό 함
    • https://api.example.com/v1/users/1234
    • Resource : users
    • Resource ID : 1234
  • ⭐ μžμ›μ— λŒ€ν•œ μ‘°μž‘μ€ Methodλ₯Ό 톡해 ν‘œν˜„ν•΄μ•Ό 함
    • URI에 ν–‰μœ„κ°€ λ“€μ–΄κ°€λ©΄ μ•ˆλ¨
      • URIλŠ” μžμ›μ„ ν‘œν˜„
    • HEADERλ₯Ό 톡해 CRUDλ₯Ό ν‘œν˜„ν•˜μ—¬ λ™μž‘μ„ μš”μ²­ν•΄μ•Ό 함
  • 메세지λ₯Ό ν†΅ν•œ λ¦¬μ†ŒμŠ€ μ‘°μž‘
    • HEADERλ₯Ό 톡해 content-type을 μ§€μ •ν•˜μ—¬ 데이터λ₯Ό 전달
    • λŒ€ν‘œμ  ν˜•μ‹μœΌλ‘œλŠ” HTML, XML, JSON, TEXT 등이 있음
      • 이건 RESTκ°€ μ •μ˜ν•˜λŠ” 것이 μ•„λ‹˜
  • 문법, ν‘œκΈ°λ²•
    • URIμ—λŠ” μ†Œλ¬Έμžλ₯Ό μ‚¬μš©
    • Resource의 μ΄λ¦„μ΄λ‚˜ URIκ°€ κΈΈμ–΄μ§ˆ 경우 ν•˜μ΄ν”ˆ(-)을 μ‚¬μš©
    • 언더바(_)λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠμŒ
    • 파일 ν™•μž₯μžλŠ” URI에 ν¬ν•¨ν•˜μ§€ μ•ŠμŒ

πŸ’« λ©”λͺ¨


🫧 참고

이 κΈ°μ‚¬λŠ” μ €μž‘κΆŒμžμ˜ CC BY 4.0 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.