REST API

August 08, 2021 · 4 mins read label-icon Server

REST μ •μ˜

Representational State Transfer 의 μ•½μžλ‘œ μžμ›μ„ μ΄λ¦„μœΌλ‘œ κ΅¬λΆ„ν•˜μ—¬ ν•΄λ‹Ή μžμ›μ˜ μƒνƒœλ₯Ό μ£Όκ³ λ°›λŠ” λͺ¨λ“  것을 μ˜λ―Έν•œλ‹€.

REST ꡬ성

  • μžμ› (RESOURCE) - URI
  • ν–‰μœ„ (Verb) - HTTP Method
  • ν‘œν˜„ (Representations)

REST νŠΉμ§•

1. Uniform Interface (μœ λ‹ˆνΌ μΈν„°νŽ˜μ΄μŠ€)

  • URI μ—μ„œ μ§€μ •ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ‘°μž‘μ„ ν†΅μΌλ˜κ³  ν•œμ •μ μΈ μΈν„°νŽ˜μ΄μŠ€λ‘œ μˆ˜ν–‰ν•œλ‹€.

2. Stateless (λ¬΄μƒνƒœμ„±)

  • μ„Έμ…˜ μ •λ³΄λ‚˜ μΏ ν‚€ 정보에 λŒ€ν•œ μƒνƒœμ •λ³΄κ°€ μ—†λ‹€.

3. Cacheable (μΊμ‹œ κ°€λŠ₯)

  • HTTP ν”„λ‘œν† μ½œμ„ λ”°λ₯΄κΈ° λ•Œλ¬Έμ— HTTP ν”„λ‘œν† μ½œμ˜ μΊμ‹œκΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆλ‹€. (Last-Modified, E-Tag)

4. Self-descriptiveness (자체 ν‘œν˜„ ꡬ쑰)

  • REST API λ©”μ‹œμ§€λ§Œ 보고 λ°”λ‘œ 이해 ν•  수 μžˆλŠ” 자체 ν‘œν˜„ ꡬ쑰이닀.

5. Server - Client ꡬ쑰

  • Server λŠ” API, Client λŠ” μ‚¬μš©μž μΈμ¦μ΄λ‚˜ μ»¨ν…μŠ€νŠΈλ₯Ό κ΄€λ¦¬ν•˜μ—¬ μ„œλ‘œ κ°„μ˜ μ˜μ‘΄μ„±μ΄ 쀄어든닀.

6. Layered System (κ³„μΈ΅ν˜• ꡬ쑰)

  • 닀쀑 κ³„μΈ΅μœΌλ‘œ ꡬ성될 수 있으며 λ³΄μ•ˆ, λ‘œλ“œ λ°ΈλŸ°μ‹±, μ•”ν˜Έν™” 계측을 μΆ”κ°€ν•΄ κ΅¬μ‘°μƒμ˜ μœ μ—°μ„±μ„ λ‘˜ 수 있고 PROXY, κ²Œμ΄νŠΈμ›¨μ΄ 같은 λ„€νŠΈμ›Œν¬ 기반의 쀑간맀체λ₯Ό μ‚¬μš©ν•  수 있게 ν•œλ‹€.

REST μž₯점

  1. HTTP ν”„λ‘œν† μ½œμ˜ 인프라λ₯Ό λ”°λ₯΄κΈ° λ•Œλ¬Έμ— REST API λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ λ³„λ„μ˜ 인프라λ₯Ό ꡬ좕할 ν•„μš”κ°€ μ—†λ‹€.
  2. HTTP ν”„λ‘œν† μ½œμ„ λ”°λ₯΄λŠ” μ—¬λŸ¬ κ°€μ§€ ν”Œλž«νΌμ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.
  3. μ˜λ„ν•˜λŠ” λ©”μ‹œμ§€κ°€ λͺ…ν™•ν•˜λ‹€.
  4. μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 역할이 λͺ…ν™•ν•˜κ²Œ λΆ„λ¦¬λœλ‹€.

REST 단점

  1. ν‘œμ€€μ΄ μ—†λ‹€.
  2. HTTP Method 의 κ°œμˆ˜κ°€ μ œν•œμ μ΄λ‹€.
  3. κ΅¬ν˜• λΈŒλΌμš°μ €μ—μ„œ μ›ν™œν•˜κ²Œ λ™μž‘ν•˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ μžˆλ‹€.

REST API

REST λ₯Ό 기반으둜 μ„œλΉ„μŠ€ API λ₯Ό κ΅¬ν˜„ν•œ 것

  • API : Application Programming Interface 의 μ•½μžλ‘œ 데이터와 κΈ°λŠ₯의 집합을 μ œκ³΅ν•˜μ—¬ 컴퓨터 ν”„λ‘œκ·Έλž¨κ°„ μƒν˜Έμž‘μš©μ„ μ΄‰μ§„ν•˜λ©°, μ„œλ‘œ 정보λ₯Ό κ΅ν™˜ κ°€λŠ₯ ν•˜λ„λ‘ ν•˜λŠ” 것

RESTful API?

REST API λ₯Ό μ œκ³΅ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€λ₯Ό μ§€μΉ­ν•˜λŠ” μš©μ–΄

REST API λ””μžμΈ κ°€μ΄λ“œ

  1. URIλŠ” μ •λ³΄μ˜ μžμ›μ„ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.
  2. μžμ›μ— λŒ€ν•œ ν–‰μœ„λŠ” HTTP Method(GET, POST, PUT, DELETE) λ₯Ό μ‚¬μš©ν•˜μ—¬ ν‘œν˜„ν•œλ‹€.
1
2
GET /members/delete/1 (x)
DELETE /members/1 (o)
  • URI 에 μ •λ³΄μ˜ μžμ›μ΄ μ•„λ‹Œ ν–‰μœ„κ°€ λ“€μ–΄μžˆκΈ° λ•Œλ¬Έμ— 1λ²ˆμ— λΆ€μ μ ˆν•˜λ‹€.
  • HTTP Method ν‘œν˜„ν•˜κ³ μž ν•˜λŠ” ν–‰μœ„μ™€ λ§žμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 2λ²ˆμ— λΆ€μ μ ˆν•˜λ‹€.

HTTP Method 의 μ’…λ₯˜

  • GET : λ¦¬μ†ŒμŠ€λ₯Ό μ‘°νšŒν•˜λŠ” 경우 μ‚¬μš©
  • POST : μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€λ₯Ό μΆ”κ°€ν•˜λŠ” 경우 μ‚¬μš©
  • PUT : λ¦¬μ†ŒμŠ€λ₯Ό λͺ¨λ‘ μˆ˜μ •ν•˜λŠ” 경우 μ‚¬μš©
  • PATCH : λ¦¬μ†ŒμŠ€λ₯Ό 일뢀 μˆ˜μ •ν•˜λŠ” 경우 μ‚¬μš©
  • DELETE : λ¦¬μ†ŒμŠ€λ₯Ό μ‚­μ œν•˜λŠ” 경우 μ‚¬μš©

URI 섀계 μ‹œ μ£Όμ˜μ‚¬ν•­

  1. μŠ¬λž˜μ‹œ(/) κ΅¬λΆ„μžλŠ” 계측 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ²½μš°μ—λ§Œ μ‚¬μš©ν•œλ‹€.
  2. λ§ˆμ§€λ§‰μ€ μŠ¬λž˜μ‹œ(/)λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€.
  3. ν•˜μ΄ν”ˆ(-)은 가독성을 λ†’μ΄λŠ” 경우 μ‚¬μš©ν•œλ‹€.
  4. 언더바(-)λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
  5. URI κ²½λ‘œμ— λŒ€λ¬ΈμžλŠ” μ ν•©ν•˜μ§€ μ•Šλ‹€.
  6. 파일 ν™•μž₯μžλŠ” URI 에 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€.

Colllectionκ³Ό Document

  • μ»¬λ ‰μ…˜ (Colllection) : λ¬Έμ„œλ“€μ˜ μ§‘ν•©, κ°μ²΄λ“€μ˜ μ§‘ν•©
  • λ„νλ¨ΌνŠΈ (Document) : λ¬Έμ„œ, ν•œ 객체
1
http://restapi.example.com/sports/soccer
  • sports 은 μ»¬λ ‰μ…˜μ΄λ‹€. (μ»¬λ ‰μ…˜μ€ 볡수 λͺ…사λ₯Ό μ‚¬μš©)
  • soccer λŠ” λ„νλ¨ΌνŠΈμ΄λ‹€.

HTTP 응닡 μ½”λ“œ

2xx

  • 200 : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ •μƒμ μœΌλ‘œ μˆ˜ν–‰ν•œ 경우
  • 201 : ν΄λΌμ΄μ–ΈνŠΈκ°€ λ¦¬μ†ŒμŠ€ 생성을 μš”μ²­ν•˜μ—¬ 생성을 μ •μƒμ μœΌλ‘œ μˆ˜ν–‰ν•œ 경우

4xx

  • 400 : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ λΆ€μ μ ˆν•œ 경우
  • 401 : ν΄λΌμ΄μ–ΈνŠΈκ°€ μΈμ¦λ˜μ§€ μ•ŠλŠ” μƒνƒœμ—μ„œ μš”μ²­ν•œ 경우
  • 403 : μ‘λ‹΅ν•˜κ³  μ‹Άμ§€ μ•ŠλŠ” λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜λŠ” 경우
  • 405 : μš”μ²­ν•œ λ¦¬μ†ŒμŠ€μ˜ Method κ°€ λ¦¬μ†ŒμŠ€μ—μ„œ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•œ 경우

3xx

  • 301 : μš”μ²­ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ URIκ°€ λ³€κ²½λ˜μ—ˆμ„ λ•Œ μ‚¬μš©ν•˜λŠ”

5xx

  • 500 : μ„œλ²„μ— λ¬Έμ œκ°€ 생긴 경우 μ‚¬μš©

좜처