TIL ( API, REST API )

2024. 6. 5. 23:31ㆍTIL

πŸ’‘ API, REST API μ œλŒ€λ‘œ μ΄ν•΄ν•˜κΈ°

 

1. REST APIλž€ ?

- RESTλŠ” Representational State TransferλΌλŠ” μš©μ–΄μ˜ μ•½μžλ‘œμ„œ 2000년도에 둜이 ν•„λ”©μ˜ λ°•μ‚¬ν•™μœ„ λ…Όλ¬Έμ—μ„œ 졜초둜 μ†Œκ°œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 둜이 필딩은 HTTP의 μ£Όμš” μ €μž 쀑 ν•œ μ‚¬λžŒμœΌλ‘œ κ·Έ λ‹Ήμ‹œ μ›Ή(HTTP)μ„€κ³„μ˜ μš°μˆ˜μ„±μ— λΉ„ν•΄ μ œλŒ€λ‘œ μ‚¬μš©λ˜μ–΄μ§€μ§€ λͺ»ν•˜λŠ” λͺ¨μŠ΅μ— μ•ˆνƒ€κΉŒμ›Œν•˜λ©° μ›Ήμ˜ μž₯점을 μ΅œλŒ€ν•œ ν™œμš©ν•  수 μžˆλŠ” μ•„ν‚€ν…μ²˜λ‘œμ¨ RESTλ₯Ό λ°œν‘œν–ˆλ‹€κ³  ν•©λ‹ˆλ‹€.

 

2. REST νŠΉμ§•

- REST의 λŒ€ν‘œμ μΈ νŠΉμ§•μœΌλ‘œ μœ λ‹ˆνΌμΈν„°νŽ˜μ΄μŠ€, λ¬΄μƒνƒœμ„±, μΊμ‹œκ°€λŠ₯, μžμ²΄ν‘œν˜„κ΅¬μ‘° 등이 μžˆμŠ΅λ‹ˆλ‹€. 

 

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

 - URL둜 μ§€μ •ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ‘°μž‘μ„ ν†΅μΌλ˜κ³  ν•œμ •μ μΈ μΈν„°νŽ˜μ΄μŠ€λ‘œ μˆ˜ν–‰ν•˜λŠ” μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌμ„ λ§ν•©λ‹ˆλ‹€.

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

 - μž‘μ—…μ„ μœ„ν•œ μƒνƒœμ •λ³΄λ₯Ό λ”°λ‘œ μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ„Έμ…˜μ •λ³΄λ‚˜ 쿠킀정보λ₯Ό λ³„λ„λ‘œ μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ„œλΉ„μŠ€μ˜ μžμœ λ„κ°€ λ†’μ•„μ§€κ³  κ΅¬ν˜„μ΄ λ‹¨μˆœν•΄μ§‘λ‹ˆλ‹€.

μΊμ‹œκ°€λŠ₯(Casheable)

 - REST의 κ°€μž₯ 큰 νŠΉμ§• 쀑 ν•˜λ‚˜λ‘œ HTTPλΌλŠ” μ›Ήν‘œμ€€μ„ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ—, μ›Ήμ—μ„œ μ‚¬μš©ν•˜λŠ” κΈ°μ‘΄ 인프라λ₯Ό κ·ΈλŒ€λ‘œ ν™œμš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. λ”°λΌμ„œ HTTPμ—μ„œ μ‚¬μš©ν•˜λŠ” Last-Modifiedνƒœκ·Έλ‚˜ E-Tagλ₯Ό μ΄μš©ν•˜μ—¬ 캐싱 κΈ°λŠ₯을 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μžμ²΄ν‘œν˜„κ΅¬μ‘°(Self-descriptiveness)

 - REST API λ©”μ„Έμ§€λ§Œ 보고도 이λ₯Ό μ‰½κ²Œ 이해할 수 μžˆλŠ” 자체 ν‘œν˜„ ꡬ쑰둜 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.

 

3. REST의 κ΅¬μ„±μš”μ†Œ

- RESTλŠ” μžμ›(Resource)-URL / ν–‰μœ„(Verb)-HTTP Method / ν‘œν˜„(Representations)으둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

 

4. REST API 섀계

- REST API μ„€κ³„μ‹œ κ°€μž₯ μ€‘μš”ν•œ ν•­λͺ©μ€ URL은 μ •λ³΄μ˜ μžμ›μ„ ν‘œν˜„ν•΄μ•Όν•˜κ³ , μžμ›μ— λŒ€ν•œ ν–‰μœ„λŠ” HTTP Method (GET, POST, PUT, DELETE)둜 ν‘œν˜„ν•΄μ•Όν•©λ‹ˆλ‹€.

• URL은 μ •λ³΄μ˜ μžμ›μ„ ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.

 ex) GET/movies/1

• μžμ›μ— λŒ€ν•œ ν–‰μœ„λŠ” HTTP Method둜 ν‘œν˜„ν•΄μ•Ό ν•œλ‹€.

 - GET: λ¦¬μ†ŒμŠ€ μ‘°νšŒν• λ•Œ μ‚¬μš© / POSTλŠ” λ¦¬μ†ŒμŠ€λ₯Ό μƒμ„±ν• λ•Œ μ‚¬μš© / PUT은 λ¦¬μ†ŒμŠ€λ₯Ό μˆ˜μ •ν• λ•Œ μ‚¬μš© / DELETEλŠ” λ¦¬μ†ŒμŠ€ μ‚­μ œν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.

 

5. URL μ„€κ³„μ‹œ 주의점

• μŠ¬λž˜μ‹œ κ΅¬λΆ„μž(/)λŠ” 계측 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€.

 ex) http://example.com/movies/comic/1

• ν•˜μ΄ν”ˆ(-)은 url 가독성을 λ†’μ΄λŠ”λ° μ‚¬μš©ν•©λ‹ˆλ‹€.

• 밑쀄(_)은 url에 μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

• url κ²½λ‘œμ—λŠ” μ†Œλ¬Έμžκ°€ μ ν•©ν•©λ‹ˆλ‹€.

 

+  HTTP 응닡 μƒνƒœμ½”λ“œ 정리

 - 200 : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ μ •μƒμ μœΌλ‘œ μˆ˜ν–‰

 - 210 : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ–΄λ– ν•œ λ¦¬μ†ŒμŠ€ 생성을 μš”μ²­, ν•΄λ‹Ή λ¦¬μ†ŒμŠ€κ°€ μ„±κ³΅μ μœΌλ‘œ 생성됨

 - 301 : λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ URL이 λ³€κ²½λ˜μ—ˆμ„ λ•Œ μ‚¬μš©

 - 400 : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ λΆ€μ μ ˆν•  경우 μ‚¬μš©ν•˜λŠ” 응닡 μ½”λ“œ 

 - 401 : μΈμ¦λ˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œ 보호된 λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν–ˆμ„ λ•Œ μ‚¬μš©

 - 404 : μš”μ²­ν•œ λ¦¬μ†ŒμŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ„ λ•Œ μ‚¬μš©