πŸ“•CS

REST API

stonesy 2024. 10. 30. 12:51
728x90

REST API

REST μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌμ˜ 섀계 원칙을 λ‹€λ₯΄λŠ” API이닀. RESTλž€ Representational Sate Transfer둜 HTTP URIλ₯Ό 톡해 μžμ›μ„ λͺ…μ‹œν•˜κ³  HTTP Method(POST, GET, PUT, DELETE)λ₯Ό 톡해 ν•΄λ‹Ή μžμ›μ— λŒ€ν•œ CRUD μž‘μ—…(Create, Read, Update, Delete)을 μˆ˜ν–‰ν•˜λŠ” 것을 λ§ν•œλ‹€.

 

1) μžμ›-URI

: λͺ¨λ“  μžμ›μ€ κ³ μœ ν•œ URIλ₯Ό 가진닀. 예λ₯Ό λ“€μ–΄, /usersλŠ” μ‚¬μš©μž λͺ©λ‘μ— λŒ€ν•œ μžμ›μ„ μ˜λ―Έν•˜λ©°, /users/{id}λŠ” νŠΉμ • μ‚¬μš©μžλ₯Ό μ‹λ³„ν•œλ‹€.

2) ν–‰μœ„-HTTP λ©”μ„œλ“œ

- GET: μžμ› 쑰회

- POST: μžμ› 생성

- PUT: μžμ› 저체 μ—…λ°μ΄νŠΈ

- PATCH: μžμ›μ˜ λΆ€λΆ„ μ—…λ°μ΄νŠΈ

- DELETE: μžμ› μ‚­μ œ

3) ν‘œν˜„

: Clientκ°€ μžμ›μ˜ μƒνƒœμ— λŒ€ν•œ μ‘°μž‘μ„ μš”μ²­ν•˜λ©΄ ServerλŠ” 이에 λŒ€ν•œ μ μ ˆν•œ 응닡을 보낸닀. 

 

λ“±μž₯ λ°°κ²½

웹이 λΉ λ₯΄κ²Œ ν™•μ‚°λ˜λ©΄μ„œ λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ HTTPλ₯Ό 톡해 데이터λ₯Ό μ£Όκ³ λ°›κΈ° μ‹œμž‘ν–ˆκ³ , HTTPλŠ” Client-Server λͺ¨λΈμ„ 기반으둜 λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ μžμ›λ“€μ„ URIλ₯Ό 톡해 μ •μ˜ν•  수 μžˆμ—ˆκ³ , RESTλŠ” 이λ₯Ό 보닀 일관성 있게 ν™œμš©ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ“±μž₯ν–ˆλ‹€. RESTλŠ” HTTPλ₯Ό ν™œμš©ν•˜μ—¬ CRUD μž‘μ—…μ„ λ‹¨μˆœν™”ν•˜κ³ , μžμ›μ„ URI둜 톡합해 관리할 수 μžˆλ„λ‘ ν•œλ‹€. 즉, ν•˜λ‚˜μ˜ λΈŒλΌμš°μ €λΏλ§Œ μ•„λ‹ˆλΌ μ›Ή, 아이폰, μ•ˆλ“œλ‘œμ΄λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ“±κ³Όμ˜ 톡신에 λ²”μš©μ μœΌλ‘œ λŒ€μ‘ν•˜κΈ° μœ„ν•΄μ„œ λ“±μž‘ν•˜μ˜€λ‹€.

 

νŠΉμ§•

 

  • λ¬΄μƒνƒœμ„± (Stateless)
    μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœλ₯Ό μ €μž₯ν•˜μ§€ μ•ŠμœΌλ©°, 각 μš”μ²­μ€ λ…λ¦½μ μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€. λ”°λΌμ„œ λͺ¨λ“  μš”μ²­μ— ν•„μš”ν•œ μ •λ³΄λŠ” μš”μ²­μ— ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • μΊμ‹œ κ°€λŠ₯μ„± (Cacheable)
    RESTful APIλŠ” μ›Ή ν‘œμ€€μΈ HTTPλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ—, ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„λ‘œλΆ€ν„° 받은 응닡을 μΊμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 λΆˆν•„μš”ν•œ μš”μ²­μ„ 쀄이고 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μΌκ΄€λœ μΈν„°νŽ˜μ΄μŠ€ (Uniform Interface)
    RESTful APIλŠ” νŠΉμ • URI와 HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄ μžμ›μ— μ ‘κ·Όν•˜λŠ” ν‘œμ€€ν™”λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λ―€λ‘œ, REST 원칙을 λ”°λ₯΄λŠ” ν•œ νŠΉμ • APIκ°€ λ‹€λ₯Έ API와도 μΌκ΄€λœ λ°©μ‹μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€.
  • κ³„μΈ΅ν™”λœ μ‹œμŠ€ν…œ (Layered System)
    ν΄λΌμ΄μ–ΈνŠΈλŠ” 쀑간 μ„œλ²„λ₯Ό 거쳐 μš”μ²­μ„ μ²˜λ¦¬ν•  수 있으며, 각 μ„œλ²„λŠ” κ³„μΈ΅μ μœΌλ‘œ λ°°μΉ˜λ˜μ–΄ λ…λ¦½μ μœΌλ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

 

쀑심 κ·œμΉ™
RESTμ—μ„œ κ°€μž₯ μ€‘μš”ν•˜λ©° 기본적인 κ·œμΉ™μ€ μ•„λž˜ 두 가지닀.

- URIλŠ” μ •λ³΄μ˜ μžμ›μ„ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.
- μžμ›μ— λŒ€ν•œ ν–‰μœ„λŠ” HTTP Method (GET, POST, PUT, DELETE λ“±)으둜 ν‘œν˜„ν•œλ‹€.

μ„ΈλΆ€ κ·œμΉ™
1. μŠ¬λž˜μ‹œ κ΅¬λΆ„μž ( / )λŠ” 계측 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ”λ° μ‚¬μš©ν•œλ‹€.
2. URI λ§ˆμ§€λ§‰ 문자둜 μŠ¬λž˜μ‹œ ( / )λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€.
즉 URI에 ν¬ν•¨λ˜λŠ” λͺ¨λ“  κΈ€μžλŠ” λ¦¬μ†ŒμŠ€μ˜ μœ μΌν•œ μ‹λ³„μžλ‘œ μ‚¬μš©λ˜μ–΄μ•Ό ν•˜λ©° URIκ°€ λ‹€λ₯΄λ‹€λŠ” κ²ƒμ€ λ¦¬μ†ŒμŠ€κ°€ λ‹€λ₯΄λ‹€λŠ” κ²ƒ
μ—­μœΌλ‘œ λ¦¬μ†ŒμŠ€κ°€ λ‹€λ₯΄λ©΄ URI도 λ‹¬λΌμ Έμ•Ό ν•œλ‹€.
3. ν•˜μ΄ν”ˆ ( - )은 URI 가독성을 λ†’μ΄λŠ”λ° μ‚¬μš©ν•œλ‹€.
4. 밑쀄 ( _ )은 URI에 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
5. URI κ²½λ‘œμ—λŠ” μ†Œλ¬Έμžκ°€ μ ν•©ν•˜λ‹€.
URI κ²½λ‘œμ— λŒ€λ¬Έμž μ‚¬μš©μ€ ν”Όν•˜λ„둝 ν•œλ‹€.
6. νŒŒμΌν™•μž₯μžλŠ” URI에 ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€.
REST API μ—μ„œλŠ” λ©”μ‹œμ§€ λ°”λ”” λ‚΄μš©μ˜ 포맷을 λ‚˜νƒ€λ‚΄κΈ° μœ„ν•œ 파일 ν™•μž₯자λ₯Ό URI μ•ˆμ— ν¬ν•¨μ‹œν‚€μ§€ μ•ŠλŠ”λ‹€.
7. λ¦¬μ†ŒμŠ€ 간에 μ—°κ΄€ 관계가 μžˆλŠ” 경우
/λ¦¬μ†ŒμŠ€λͺ…/λ¦¬μ†ŒμŠ€ID/관계가 μžˆλŠ” λ‹€λ₯Έ λ¦¬μ†ŒμŠ€ λͺ…
ex) GET: /users/2/orders (일반적으둜 μ†Œμœ μ˜ κ΄€κ³„λ₯Ό ν‘œν˜„ν•  λ•Œ μ‚¬μš©)

728x90