βš™οΈERROR & CS/CS

[CS/API] RESTful API λž€? +URI, HATEOAS

soonybutter 2024. 12. 14. 15:16
728x90

2024.12.14 - [πŸ’»/CS] - [CS/ API] API λž€?

[CS/ API] API λž€?

ν”„λ‘œκ·Έλž˜λ° 곡뢀λ₯Ό ν•˜λ©° μˆ˜μ—†μ΄ λ“€μ–΄λ³΄κ²Œ λ˜λŠ”κ²Œ λ°”λ‘œ ' API ' λ‹€. API에 λŒ€ν•΄ λͺ…ν™•ν•˜κ²Œ μ •λ¦¬ν•΄λ³΄μž. ☺️  1. API λž€?: Application Programming Interface μ‰½κ²Œ 말해 ' μƒν˜Έκ°„μ˜ μ†Œν†΅μ„ μœ„ν•œ 접점' 이라고

soonybutter.tistory.com

 

μ €λ²ˆμ— API의 κ°œλ…μ— λŒ€ν•΄ κ°„λž΅νžˆ 정리 ν–ˆλ‹€.
 
 
μ΄λ²ˆμ—λŠ” REST API, μ •ν™•ν•˜κ²ŒλŠ” RESTful API에 λŒ€ν•΄ μ •λ¦¬ν•΄λ³΄μž. ☺️

 






 
 

1. RESTful API λž€?

RESTful APIλŠ” λ‹€μ–‘ν•œ ν˜•μ‹λ“€ 쀑 μ˜€λŠ˜λ‚  κ°€μž₯ 널리 μ‚¬μš©λ˜λŠ” 것이닀.
 
RESTful APIλŠ” Aκ°€ μ–΄λ–€λ°©μ‹μœΌλ‘œ 데이터λ₯Ό μš”μ²­ν•˜λ©΄, Bκ°€ μ–΄λ–€ λ°©μ‹μœΌλ‘œ 응닡할 μ§€ 지정해놓은 λ‹€μ–‘ν•œ ν˜•μ‹ 쀑 ν•˜λ‚˜μ΄λ‹€.
 
μ™œ 이 λ°©μ‹μ˜ APIκ°€ 인기가 많고 쒋은 λ°©μ‹μ΄λΌλŠ” κ²ƒμΌκΉŒ?
 
μ–΄λ– ν•œ μΈν„°νŽ˜μ΄μŠ€μ™€ μ„œλ²„κ°€ RESTful API ν˜•μ‹μ˜ APIλ₯Ό 톡해 μ†Œν†΅μ„ ν•œλ‹€κ³  ν•˜λ©΄,
이듀은 크게 'CRUD'λ°©μ‹μœΌλ‘œ μž‘λ™ν•œλ‹€.
 
Create : 정보λ₯Ό μƒμ„±ν•΄μ„œ λ„£λŠ” 것 (정보좔가)
Read : μ‘°νšŒν•˜λŠ” 것
Update : ν˜„μ‘΄ν•˜λŠ” νŠΉμ • 정보λ₯Ό λ³€κ²½ν•˜λŠ” 것
Delete : νŠΉμ • 정보λ₯Ό μ‚­μ œν•˜λŠ” 것
 
 
CRUD에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ μ΄μ „μ˜ κ²Œμ‹œλ¬Όμ„ μ°Έκ³ ν•˜μž. ☺️

2024.10.31 - [πŸ’»/Server] - [μ„œλ²„] CRUD λž€? + CRUD와 REST

[μ„œλ²„] CRUD λž€?  + CRUD와 REST

1. CRUD λž€?Create, Read, Update, Delete의 μ•½μ–΄λ‘œ λ°μ΄ν„°λ² μ΄μŠ€ λ“±μ˜ μ‹œμŠ€ν…œμ—μ„œ 데이터λ₯Ό κ΄€λ¦¬ν•˜λŠ” 기본적인 κΈ°λŠ₯을 μ˜λ―Έν•œλ‹€. CRUD κ°œλ…μ€ μ›Ήμ‹œμŠ€ν…œ 뿐만 μ•„λ‹ˆλΌ 거의 λͺ¨λ“  μ‹œμŠ€ν…œμ—μ„œ μ μš©λœλ‹€. 2. DB와

soonybutter.tistory.com

 
 
 
 
 
 

2. RESTful API νŠΉμ§•1-  URI

 

λ‹€μ‹œ RESTful API둜 λŒμ•„μ™€μ„œ,
이 4κ°€μ§€ μž‘μ—…μ„ μœ„ν•œ μš”μ²­(Request)듀을 RESTfulν•œ μš”μ²­μœΌλ‘œ 보내기 μœ„ν•œ πŸ”URI을 μž‘μ„±ν•΄λ³΄λ©΄ μ•„λž˜μ™€ κ°™λ‹€.


πŸ”
URI : Uniform Resource Identifier, ν†΅ν•©μžμ›μ‹λ³„μž
인터넷에 μžˆλŠ” μžμ›μ„ λ‚˜νƒ€λ‚΄λŠ” μœ μΌν•œ μ£Όμ†Œ. μΈν„°λ„·μ— μ‘΄μž¬ν•˜λŠ” κ°μ’… μ •λ³΄λ“€μ˜ μœ μΌν•œ μ΄λ¦„μ΄λ‚˜ μœ„μΉ˜λ₯Ό ν‘œμ‹œν•˜λŠ” μ‹λ³„μžμ΄λ‹€.
 
URL: Uniform Resource Locator
μ›Ήμ£Όμ†Œμ΄λ‹€. μ»΄ν“¨ν„° λ„€νŠΈμ›Œν¬ μƒμ—μ„œ λ¦¬μ†ŒμŠ€κ°€ μ–΄λ””μžˆλŠ”μ§€ μ•Œλ €μ£ΌκΈ° μœ„ν•œ κ·œμ•½μ΄λ‹€.
 


 
 
 

URI μ˜ˆμ‹œ

 

λ‹€μ‹œ μœ„μ˜ APIλ₯Ό μš”μ²­ν•œ ν˜•μ‹μ„ μ‚΄νŽ΄λ³΄λ©΄,
λͺ¨λ‘ HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•΄ μž‘μ—…μ„ μš”μ²­ν•˜κ³  μžˆλ‹€.
 
HTTPλŠ” RESTful API의 ν•„μˆ˜μš”μ†ŒλŠ” μ•„λ‹ˆμ§€λ§Œ, RESTful API의 쑰건을 κ΅¬ν˜„ν•˜κΈ°μ— μš©μ΄ν•¨μœΌλ‘œ,
ν˜„μ—…μ—μ„œλŠ” 주둜 HTTPκ°€ μ‚¬μš©λœλ‹€κ³  ν•œλ‹€.
 
μœ„μ˜ μ˜ˆμ‹œμ—μ„œ
v1은 api의 버전정보λ₯Ό λ‚˜νƒ€λ‚΄κ³  μžˆλ‹€.
각 uri의 λΆ„ν™κΈ€μ”¨μ˜ booksλŠ” 각 μš”μ²­μ΄ μ–΄λ–€ 데이터에 κ΄€ν•œ 것인지λ₯Ό λͺ…μ‹œν•˜κ³  μžˆλ‹€.
 
즉,
λ§Œμ•½ API κ°€ REST원칙을 잘 μ§€μΌœ λ§Œλ“€μ–΄μ‘Œλ‹€λ©΄
각 μš”μ²­μ˜ λ©”μ„œλ“œ(REST)와 URI μžμ²΄κ°€ κ·Έκ²ƒμ˜ λͺ©μ μ„ λͺ…ν™•νžˆ λ‚˜νƒ€λ‚΄κΈ° λ•Œλ¬Έμ—
κ°œλ°œμžλŠ” λ‹€λ₯Έ νŒ€κ³Ό ν˜‘μ—…μ„ ν•˜κ±°λ‚˜, μ–΄λ–€ APIλ₯Ό 처음으둜 μ‚¬μš©ν•΄μ•Όν•  λ•Œμ—λ„ μƒˆ API 의 μ‚¬μš©λ²•μ„ μ‰½κ²Œ 읡힐 수 μžˆλ‹€. 
 
 
RESTful APIμ—μ„œμ˜ μš”μ²­κ³Ό μ‘λ‹΅μ—μ„œλŠ” κ΅¬μ‘°ν™”λœ λ°μ΄ν„°ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ©΄μ„œλ„ κ°€λ²Όμš΄ JSON이 많이 μ‚¬μš©λœλ‹€.
(JSON에 λŒ€ν•΄μ„œλŠ” 좔후에 κΈ°νšŒκ°€ 되면 정리할 μ˜ˆμ •μ΄λ‹€.☺️)
 
 
 
 
각각의 URI λ³„λ‘œ μ–΄λ–€ 정보λ₯Ό λ‚˜νƒ€λ‚΄λŠ”μ§€ λͺ‡κ°€μ§€ URIλ₯Ό 톡해 μ•Œμ•„λ³΄μž.
 
 
CASE 1.
μ˜ˆμ‹œλ‘œ GET λ°©μ‹μœΌλ‘œ APIλ₯Ό μš”μ²­ν•˜μ˜€λ‹€κ³ ν•œλ‹€λ©΄,
μ΄λŠ” λ„μ„œ 정보λ₯Ό λͺ¨λ‘ λΆˆλŸ¬λ‹¬λΌλŠ” 것을 μ˜λ―Έν•œλ‹€.
μ•„λž˜μ˜ URIμ—μ„œλŠ” 거기에 λ”λΆˆμ–΄ 'status=available'μ΄λΌλŠ” 쑰건을 λͺ…μ‹œν–ˆλ‹€.
μ΄λŸ¬ν•œ 쑰건을 λͺ…μ‹œν•¨μœΌλ‘œμ„œ statusκ°€ available인 μƒνƒœμ˜ μ±…λ“€λ§Œ ν™•μΈν•˜λ„λ‘ ν•˜λŠ” 것이닀. 

 
 
 
CASE2.
μ‹€λ¬΄μ—μ„œλŠ” URI에 νŽ˜μ΄μ§€μ— λŒ€ν•œ 쑰건을 λ„£μ–΄λ‘ μœΌλ‘œμ„œ
ν•œ νŽ˜μ΄μ§€μ— 10κΆŒμ”© 뜨게 ν•΄λ‹¬λΌλŠ” 쑰건을 λΆ™μ—¬
ν•œ νŽ˜μ΄μ§€λ‚΄ ν‘œμ‹œλ  λ°μ΄ν„°μ˜ 수λ₯Ό μ œν•œν•˜λŠ”λ°, μ΄λŠ” 데이터λ₯Ό λ‘œλ“œν•˜λŠ” κ³Όμ •μœΌλ‘œλΆ€ν„° κ³ΌλΆ€ν•˜λ₯Ό λ°©μ§€ν•œλ‹€.

 
 

CASE3.
PUTκ³Ό PATCHλŠ” λͺ¨λ‘ Update에 ν•΄λ‹Ήν•œλ‹€.
 

PUT은 μ „λΆ€λ₯Ό κ°ˆμ•„ μ—ŽλŠ”λ‹€. 

 
반면, PATCHλŠ” λΆ€λΆ„λ§Œ μˆ˜μ •ν•œλ‹€λŠ” 차이가 μžˆλ‹€.

 
 
 

 
 

3.RESTful API νŠΉμ§•2 - HATEOAS

RESTful APIμ—μ„œ ꢌμž₯λ˜λŠ” λ˜λ‹€λ₯Έ 원칙은 HATEOAS 이닀.
Hypermedia
As
The
Engine
Of
Application State
 
μ΄λŠ” 각 μš”μ²­μ˜ 응닡에, κ°€μš©ν•œ λ‹€λ₯Έ μš”μ²­λ“€μ˜ 정보λ₯Ό ν¬ν•¨μ‹œν‚€λŠ” 것이닀.
이 λ¦¬μ†ŒμŠ€μ— λŒ€ν•΄ μ΄λŸ¬ν•œ κΈ°λŠ₯듀도 이와 같이 μš”μ²­ν•  수 μžˆλ‹€κ³  μ²¨λΆ€ν•΄μ£ΌλŠ” 것이닀!

HATEOAS μ˜ˆμ‹œ

이 링크 정보듀을 톡해 κ°œλ°œμžλŠ” APIλ¬Έμ„œλ₯Ό λ‹€ 뒀져보지 μ•Šμ•„λ„
λ‹€μŒμ— μ–΄λ–€ μš”μ²­μ„ 보낼 수 μžˆλŠ”μ§€ λ³Ό 수 있으며,
이 λΆ€λΆ„μ˜ API의 세뢀사항이 λ³€κ²½λ˜λ”λΌλ„, ν΄λΌμ΄μ–ΈνŠΈλŠ” 이 정보λ₯Ό μ°Έμ‘°ν•˜κ²Œ λ§Œλ“€λ©΄ ν΄λΌμ΄μ–ΈνŠΈμ˜ μ½”λ“œλ₯Ό κ³ μΉ  ν•„μš”λ„ μ—†μ–΄μ§€λŠ” 것이닀.
 
각 APIλŠ” HATEOASλ₯Ό κ°€μ§€κ³  있으면 μ’‹λ‹€.
 
 
 
 

4. RESTful API νŠΉμ§•3 - μ‘λ‹΅μ˜ μƒνƒœμ½”λ“œ

 
: μ„œλ²„μ˜ μ‘λ‹΅μ—λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•œ κ²°κ³Όλ₯Ό μ•Œλ €μ£ΌλŠ” μƒνƒœμ½”λ“œκ°€ λ‹΄κ²¨μ˜¨λ‹€.
 
2XX : Success
4XX : Client Error (URIκ°€ 잘λͺ»λ¨ or κΆŒν•œ μ™Έμ˜ μš”μ²­μ„ 함 . 즉, ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­ 잘λͺ»)
5XX : Server Error 
 
ν¬κ²ŒλŠ” μ΄λ ‡κ²Œ ꡬ뢄할 수 있으며, μžμ„Έν•œ μƒνƒœμ½”λ“œλŠ” μ΄μ „μ˜ 글을 μ°Έκ³ ν•˜μž.☺️

2024.10.29 - [πŸ’»/Network] - [HTTP] Http μƒνƒœ μ½”λ“œ (Http Status Code)

[HTTP] Http μƒνƒœ μ½”λ“œ (Http Status Code)

Http μƒνƒœ μ½”λ“œ -> νŠΉμ • HTTP μš”μ²­μ΄ μ •μƒμ μœΌλ‘œ μ™„λ£Œλ˜μ—ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 3자리 숫자 μ½”λ“œμ΄λ‹€.100번 λΆ€ν„° μ‹œμž‘ν•΄μ„œ 500λ²ˆλŒ€κΉŒμ§€ 크게 총 5개의 νƒ€μž…μœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.μƒνƒœ μ½”λ“œλŠ” 항상 μƒνƒœλ©”

soonybutter.tistory.com

 

 
 
 

5. RESTful API νŠΉμ§•4- Stateless

λ˜ν•œ Restful APIλŠ” 'Stateless' νŠΉμ„±μ„ κ°€μ§„λ‹€.
Statelessλž€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μƒνƒœ 정보가 μ„œλ²„μ— μ €μž₯λ˜μ§€ 말아야 ν•œλ‹€λŠ” 것이닀.
즉, μ„œλ²„λŠ” ν¬λΌμ΄μ–ΈνŠΈμ— λŒ€ν•΄ 아무것도 κΈ°μ–΅ν•˜λ©΄ μ•ˆλœλ‹€λŠ” 것이닀.
이 νŠΉμ„± λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈλŠ” μš”μ²­μ„ λͺ‡λ²ˆμ§Έ λ°˜λ³΅ν•΄μ„œ 보내든지 간에, ν•„μš”ν•œ λ‚΄μš©μ„ 맀번 λͺ¨λ‘ ν¬ν•¨ν•˜κ³  μžˆμ–΄μ•Όν•œλ‹€.
 
 
ν΄λΌμ΄μ–ΈνŠΈ : μ•„κΉŒ λ‚΄κ°€ μš”μ²­ν–ˆλ˜κ±° λ‹€μ‹œ μš”μ²­ν•œλ‹€~ ν•΄μ€˜ ~~
μ„œλ²„ : μ•ˆλ¨! λ‹€μ‹œ μš”μ²­ν•΄μ£Όμ„Έμš”.
 
 
ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” μ„œλ‘œλ₯Ό κΈ°μ–΅ν•΄μ„œλŠ” μ•ˆλœλ‹€.ν•˜μ§€λ§Œ, 각각 본인이 μ–΄λ–€ μš”μ²­μ„ λ³΄λƒˆλŠ”μ§€ 또, μ–΄λ–€ 응닡을 λ³΄λƒˆλŠ”μ§€, μ–΄λ–€ 응닡을 λ°›μ•˜λŠ”μ§€λŠ” κΈ°μ–΅ν•΄λ‘λŠ”κ²Œ μ’‹λ‹€. -> 캐싱(Caching)
 
ν΄λΌμ΄μ–ΈνŠΈκ°€ μ–΄λ–€ μš”μ²­μ— λŒ€ν•œ 응닡을 λ³ΈμΈμ—κ²Œ 캐싱해두면, 같은 데이터가 ν•„μš”ν•  λ•Œλ§ˆλ‹€ μš”μ²­μ„ 보내지 μ•Šμ•„λ„ 되고,μ„œλ²„λ„ νŠΉμ •μš”μ²­μ— λŒ€ν•΄ μ‘λ‹΅ν•œ 것을 캐싱해두면, 같은 μš”μ²­μ΄ λ“€μ–΄μ™”μ„λ•Œ 또 DBμ—μ„œ 정보λ₯Ό 캐내지 μ•Šμ•„λ„ λœλ‹€λŠ” 것이닀.
 
 
 
 
 
 
 
 
 
 
 
* 유튜브 μ–„νŒν•œ μ½”λ”©μ‚¬μ „λ‹˜- μ˜μƒ μ°Έκ³ 

728x90