Web Basic: REST API

μ½”λ”©ν•˜λŠ” 포둜리·2022λ…„ 2μ›” 9일
0

Java

λͺ©λ‘ 보기
3/3
post-thumbnail

πŸ“Œ 1. API(Application Programming Interface)λž€?


πŸ“Ž APIλž€?

APIλŠ” μ‘μš© ν”„λ‘œκ·Έλž¨(μ• ν”Œλ¦¬μΌ€μ΄μ…˜)μ—μ„œ 운영 μ²΄μ œλ‚˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 μ œμ–΄ν•  수 있게 λ§Œλ“  μΈν„°νŽ˜μ΄μŠ€λ₯Ό λœ»ν•œλ‹€. 주둜 파일 μ œμ–΄, μ°½ μ œμ–΄, 화상 처리, 문자 μ œμ–΄ 등을 μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.

πŸ“Ž μ›Ή APIλž€?

μ›Ή APIλŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ„ ν• λ•Œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„, μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ“± μ„œλ‘œ μš”μ²­κ³Ό 응닡을 μ£Όκ³  λ°›κΈ° μœ„ν•΄μ„œ μ •μ˜ν•œ API이닀.

πŸ“Ž μ›Ή API의 μ—­ν• 

πŸ‘‰ μ„œλ²„μ™€ λ°μ΄ν„°λ² μ΄μŠ€μ•ˆμ˜ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  수 있게 ν•΄μ€€λ‹€. APIλŠ” μ ‘κ·Ό κΆŒν•œμ΄ μΈκ°€λœ μ‚¬λžŒμ—κ²Œλ§Œ μ„œλ²„μ™€ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•  수 μžˆκ²Œν•œλ‹€.
πŸ‘‰ λͺ¨λ“  μš”μ²­κ³Ό 응닡을 ν‘œμ€€ν™”ν•œλ‹€. μ• ν”Œν°μ΄λ“  삼성폰이든 상관없이 λ™μΌν•œ APIλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­κ³Ό μ„œλ²„μ˜ 응닡을 ν•˜λ‚˜μ˜ API둜 ν‘œμ€€ν™”ν•œλ‹€.


πŸ“Œ 2. REST API


πŸ“Ž REST APIλž€?

REST API(Representational State Transfer)λŠ” μ›Ήμƒμ—μ„œ μ‚¬μš©λ˜λŠ” μ—¬λŸ¬ λ¦¬μ†ŒμŠ€λ₯Ό HTTP URI둜 ν‘œν˜„ν•˜κ³ , ν•΄λ‹Ή λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ ν–‰μœ„λ₯Ό HTTP Method둜 μ •μ˜ν•˜λŠ” 아킀텍쳐 μŠ€νƒ€μΌμ΄μž λ°©μ‹μ„λ§ν•œλ‹€.

πŸ“Ž REST API의 탄생 λ°°κ²½

πŸ‘‰ 이전과 달리 μ΅œκ·Όμ—λŠ” λ©€ν‹° ν”Œλž«νΌ, λ©€ν‹° λ””λ°”μ΄μŠ€ μ‹œλŒ€λ‘œ λ„˜μ–΄μ™€ μžˆμ–΄μ„œ μ—¬λŸ¬ μ›Ή λΈŒλΌμš°μ €μ™€ 아이폰, μ•ˆλ“œλ‘œμ΄λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Όμ˜ 톡신에 λŒ€μ‘ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
πŸ‘‰ 이런 μ‹œλŒ€μ— 맞좰 각각 λŒ€μ‘ν•˜λŠ” μƒˆλ‘œμš΄ μ„œλ²„λ₯Ό λ§Œλ“€κΈ°λ³΄λ‹€ λ²”μš©μ μœΌλ‘œ μ‚¬μš©μ„±μ„ 보μž₯ν•˜λŠ” μ„œλ²„ λ””μžμΈμ΄ ν•„μš”ν•˜κ²Œ λ˜μ–΄ Rest APIκ°€ κ°œλ°œλ˜μ—ˆλ‹€.

πŸ“Ž REST API κ΅¬μ„±μš”μ†Œ

πŸ‘‰ μžμ›(Resource): HTTP URI

  • λͺ¨λ“  μžμ›μ— κ³ μœ ν•œ IDκ°€ μ‘΄μž¬ν•˜κ³ , 이 μžμ›μ€ Serverd에 μ‘΄μž¬ν•œλ‹€.
  • μžμ›μ„ κ΅¬λ³„ν•˜λŠ” IDλŠ” HTTP URL이닀.
  • ClientλŠ” URLλ₯Ό μ΄μš©ν•΄μ„œ μžμ›μ„ μ§€μ •ν•˜κ³ , ν•΄λ‹Ή μžμ›μ˜ μƒνƒœ(정보)에 λŒ€ν•œ μ‘°μž‘μ„ Server에 μš”μ²­ν•œλ‹€.

πŸ‘‰ μžμ›μ— λŒ€ν•œ ν–‰μœ„(Verb): Http Method

  • HTTP ν”„λ‘œν† μ½œμ˜ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.
  • HTTP ν”„λ‘œν† μ½œμ€ GET, POST, PUT, PATCH, DELETE와 같은 λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.
Methodμ—­ν• 
POSTμƒˆλ‘œμš΄ μžμ›μ„ μΆ”κ°€ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
GETμžμ›μ„ λ°›μ•„μ˜€κΈ°λ§Œ ν• λ•Œ μ‚¬μš©ν•œλ‹€.
PUTμ‘΄μž¬ν•˜λŠ” μžμ›μ„ λ³€κ²½ν• λ•Œ μ‚¬μš©ν•œλ‹€.
PATCHν•œ μžμ›μ˜ 데이터λ₯Ό λΆ€λΆ„μ μœΌλ‘œ λ³€κ²½ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
DELETEμžμ›μ„ μ‚­μ œν• λ•Œ μ‚¬μš©ν•œλ‹€.

πŸ‘‰ ν‘œν˜„(Representation of Resource): HTTP Message Pay Load

  • Clientκ°€ μžμ›μ— λŒ€ν•œ μƒνƒœ(정보)에 λŒ€ν•œ μ‘°μž‘μ„ μš”μ²­ν•˜λ©΄ ServerλŠ” 이에 μ μ ˆν•œ 응닡(Represention)을 보낸닀.
  • Restμ—μ„œ ν•˜λ‚˜μ˜ μžμ›μ€ JSON, XML, TEXT, RSSλ“± μ—¬λŸ¬ ν˜•νƒœμ˜ Representaion으둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.
  • JSON ν˜Ήμ€ XMLλ₯Ό 톡해 데이터λ₯Ό μ£Όκ³  λ°›λŠ” 것이 μΌλ°˜μ μ΄λ‹€.

πŸ“Ž REST의 νŠΉμ§•

πŸ‘‰ ν΄λΌμ΄μ–ΈνŠΈ/μ„œλ²„ ꡬ쑰:

  • ν΄λΌμ΄μ–ΈνŠΈλŠ” μœ μ €μ™€ κ΄€λ ¨λœ 처리λ₯Ό, μ„œλ²„λŠ” REST APIλ₯Ό μ œκ³΅ν•¨μœΌλ‘œμ¨ 각각의 역할이 ν™•μ‹€ν•˜κ²Œ κ΅¬λΆ„λ˜κ³  일괄적인 μΈν„°νŽ˜μ΄μŠ€λ‘œ λΆ„λ¦¬λ˜μ–΄ μž‘λ™ν•  수 있게 ν•œλ‹€.
  • REST Server: APIλ₯Ό μ œκ³΅ν•˜κ³  λΉ„μ§€λ‹ˆμŠ€ 둜직 및 μ €μž₯을 μ±…μž„μ§„λ‹€.
  • Client: μ‚¬μš©μž μΈμ¦μ΄λ‚˜ context(μ„Έμ…˜, 둜그인 정보)등을 직접 κ΄€λ¦¬ν•˜κ³  μ±…μž„μ§„λ‹€.
  • μ„œλ‘œ κ°„μ˜ μ˜μ‘΄μ„±μ΄ 쀄어든닀.

πŸ‘‰ λ¬΄μƒνƒœμ„±(Stateless):

  • RESTλŠ” HTTP의 νŠΉμ„±μ„ μ΄μš©ν•˜κΈ° λ•Œλ¬Έμ— λ¬΄μƒνƒœμ„±μ„ κ°–λŠ”λ‹€.
  • 즉 μ„œλ²„μ—μ„œ μ–΄λ–€ μž‘μ—…μ„ ν•˜κΈ° μœ„ν•΄ μƒνƒœμ •λ³΄λ₯Ό κΈ°μ–΅ν•  ν•„μš”κ°€ μ—†κ³  λ“€μ–΄μ˜¨ μš”μ²­μ— λŒ€ν•΄ 처리만 ν•΄μ£Όλ©΄ 되기 λ•Œλ¬Έμ— κ΅¬ν˜„μ΄ 쉽고 λ‹¨μˆœν•΄μ§„λ‹€.

πŸ‘‰ μΊμ‹œ 처리 κ°€λŠ₯(Cacheable):

  • HTTPλΌλŠ” κΈ°μ‘΄ μ›Ήν‘œμ€€μ„ μ‚¬μš©ν•˜λŠ” REST의 νŠΉμ§• 덕뢄에 κΈ°λ³Έ μ›Ήμ—μ„œ μ‚¬μš©ν•˜λŠ” 인프라λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
  • λŒ€λŸ‰μ˜ μš”μ²­μ„ 효율적으둜 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μΊμ‹œκ°€ μš”κ΅¬λœλ‹€.
  • μΊμ‹œ μ‚¬μš©μ„ 톡해 μ‘λ‹΅μ‹œκ°„μ΄ λ°œλΌμ§€κ³  REST Server νŠΈλžœμž­μ…˜μ΄ λ°œμƒν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 전체 μ‘λ‹΅μ‹œκ°„, μ„±λŠ₯, μ„œλ²„μ˜ μžμ› 이용λ₯ μ„ ν–₯상 μ‹œν‚¬ 수 μžˆλ‹€.

πŸ‘‰ 자체 ν‘œν˜„ ꡬ쑰(self-descriptiveness):

  • JSON을 μ΄μš©ν•œ λ©”μ‹œμ§€ 포멧을 μ΄μš©ν•˜μ—¬ μ§κ΄€μ μœΌλ‘œ 이해할 수 있고 REST API λ©”μ‹œλ§ŒμœΌλ‘œ κ·Έ μš”μ²­μ΄ μ–΄λ–€ ν–‰μœ„λ₯Ό ν•˜λŠ”μ§€ ν•  수 μžˆλ‹€.

πŸ‘‰ 계측화(Layered System):

  • ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ λΆ„λ¦¬λ˜μ–΄ 있기 λ•Œλ¬Έμ— 쀑간에 ν”„λ‘μ‹œ μ„œλ²„, μ•”ν˜Έν™” 계측 λ“± 쀑간맀체λ₯Ό μ‚¬μš©ν•  수 μžˆμ–΄ μžμœ λ„κ°€ λ†’λ‹€.

πŸ‘‰ μœ λ‹ˆνΌ μΈν„°νŽ˜μ΄μŠ€(Uniform Interface):

  • Uniform InterfaceλŠ” HTTP ν‘œμ€€μ—λ§Œ λ”°λ₯Έλ‹€λ©΄ λͺ¨λ“  ν”Œλž«νΌμ—μ„œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ©°, URI둜 μ§€μ •ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ‘°μž‘μ„ κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 아킀텍쳐 μŠ€νƒ€μΌμ„ λ§ν•œλ‹€.
  • URI둜 μ§€μ •ν•œ Resource에 λŒ€ν•œ μ‘°μž‘μ„ ν†΅μΌλ˜κ³  ν•œμ •μ μΈ μΈν„°νŽ˜μ΄μŠ€λ‘œ μˆ˜ν–‰ν•œλ‹€.
  • νŠΉμ • μ–Έμ–΄λ‚˜ κΈ°μˆ μ— μ’…μ†λ˜μ§€ μ•ŠλŠ”λ‹€.

πŸ“Ž REST의 단점

πŸ‘‰ ν‘œμ€€μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
πŸ‘‰ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ†Œλ“œκ°€ CRUD 4가지 밖에 μ—†λ‹€.
πŸ‘‰ HTTP에 μƒλ‹Ήνžˆ μ˜μ‘΄μ μ΄λ‹€. RESTλŠ” 섀계 원리이기 λ•Œλ¬Έμ— HTTPμ™€λŠ” 상관없이 λ‹€λ₯Έ ν”„λ‘œν† μ½œμ—μ„œλ„ κ΅¬ν˜„ν•  수 μžˆκΈ°λŠ” ν•˜μ§€λ§Œ μžμ—°μŠ€λŸ¬μš΄ 개발이 νž˜λ“€λ‹€. λ‹€λ§Œ RESTλ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ κ°€ λŒ€λΆ€λΆ„μ˜ μ„œλΉ„μŠ€κ°€ μ›ΉμœΌλ‘œ ν†΅ν•©λ˜λŠ” 상황이기에 큰 단점이 μ•„λ‹ˆλ‹€.
πŸ‘‰ RESTλŠ” URI, HTTPλ₯Ό μ΄μš©ν•œ 아킀텍쳐링 방법에 λŒ€ν•œ λ‚΄μš©λ§Œμ„ λ‹΄κ³  μžˆλ‹€. λ³΄μ•ˆκ³Ό ν†΅μ‹ κ·œμ•½ μ •μ±… 같은 것은 μ „ν˜€ 닀루지 μ•ŠλŠ”λ‹€. λ”°λΌμ„œ κ°œλ°œμžλŠ” 톡신과 정책에 λŒ€ν•œ 섀계와 κ΅¬ν˜„μ„ λ„λ§‘μ•„μ„œ 진행해야 ν•œλ‹€.
πŸ‘‰ κ΅¬ν˜• λΈŒλΌμš°μ €κ°€ 지원해주지 λͺ»ν•˜λŠ” 뢀뢄이 μ‘΄μž¬ν•œλ‹€. (PUT, DELETEλ₯Ό μ‚¬μš©ν•˜μ§€ λͺ»ν•¨/PushStateλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠμŒ)

πŸ“Ž REST의 κ·œμΉ™

πŸ‘‰ URIλŠ” λͺ…사λ₯Ό μ‚¬μš©ν•œλ‹€.
πŸ‘‰ μŠ¬λž˜μ‹œ(/)둜 계측 관계λ₯Ό ν‘œν˜„ν•œλ‹€.
πŸ‘‰ URI의 λ§ˆμ§€λ§‰μ—λŠ” μŠ¬λž˜μ‹œ(/)λ₯Ό 뢙이지 μ•ŠλŠ”λ‹€.
πŸ‘‰ URIλŠ” μ†Œλ¬Έμžλ‘œλ§Œ κ΅¬μ„±ν•œλ‹€.
πŸ‘‰ 가독성이 λ–¨μ–΄μ§€λŠ” 경우 언더바(_) λŒ€μ‹  ν•˜μ΄ν”ˆ(-)을 μ‚¬μš©ν•œλ‹€.

πŸ“Ž RESTful ν•˜λ‹€?

RESTfulν•˜λ‹€λž€, REST의 원리λ₯Ό λ”°λ₯΄λŠ” μ‹œμŠ€ν…œμ„ μ˜λ―Έν•œλ‹€. ν•˜μ§€λ§Œ RESTλ₯Ό μ‚¬μš©ν–ˆλ‹€ ν•˜μ—¬ λͺ¨λ‘κ°€ RESTfulν•œ 것은 μ•„λ‹ˆλ©°, REST API 섀계 κ·œμΉ™μ„ μ˜¬λ°”λ₯΄κ²Œ 지킨 μ‹œμŠ€ν…œμ„ RESTfulν•˜λ‹€ 말할 수 μžˆλ‹€.

λ”°λΌμ„œ λͺ¨λ“  CRUD κΈ°λŠ₯을 POST둜 처리 ν•˜λŠ” API ν˜Ήμ€ URI κ·œμΉ™μ„ μ˜¬λ°”λ₯΄κ²Œ 지킀지 μ•Šμ€ APIλŠ” REST API의 섀계 κ·œμΉ™μ„ μ˜¬λ°”λ₯΄κ²Œ 지킀지 λͺ»ν•œ μ‹œμŠ€ν…œμ€ REST APIλ₯Ό μ‚¬μš©ν–ˆμ§€λ§Œ RESTfulν•˜μ§€ λͺ»ν•œ μ‹œμŠ€ν…œμ΄λΌκ³  ν•  수 μžˆλ‹€.



πŸ“– μ°Έκ³ 

0개의 λŒ“κΈ€