TIL-063 | REST & RESTful API

Lee, ChankyuΒ·2022λ…„ 1μ›” 10일
0

Computer Science

λͺ©λ‘ 보기
5/12
post-thumbnail

🌈 REST API

REST(Representational State Transer)λž€?

: μžμ›μ„ 이름(μžμ›μ˜ ν‘œν˜„)으둜 κ΅¬λΆ„ν•˜μ—¬ ν•΄λ‹Ή μžμ›μ˜ μƒνƒœ(정보)λ₯Ό μ£Όκ³  λ°›λŠ” λͺ¨λ“  것을 의미

  • μ†Œν”„νŠΈμ›¨μ–΄ 개발 μ•„ν‚€ν…μ²˜μ˜ ν•œ ν˜•μ‹μ΄λ©°, RESTλŠ” 기본적으둜 μ›Ήμ˜ κΈ°μ‘΄ 기술과 HTTP ν”„λ‘œν† μ½œμ„ κ·ΈλŒ€λ‘œ ν™œμš©ν•˜κΈ° λ•Œλ¬Έμ— μ›Ήμ˜ μž₯점을 μ΅œλŒ€ν•œ ν™œμš©ν•  수 μžˆλŠ” μ•„ν‚€ν…μ²˜ μŠ€νƒ€μΌμ΄λ‹€.

  • RESTλŠ” λ„€νŠΈμ›Œν¬ μƒμ—μ„œ Client와 Server μ‚¬μ΄μ˜ 톡신 방식 쀑 ν•˜λ‚˜μ΄λ‹€.

  • HTTP URI(Uniform Resource Identifier)λ₯Ό 톡해 μžμ›(Resource)을 λͺ…μ‹œ

  • HTTP Method(POST, GET, PUT, DELETE) μ‚¬μš©

  • ν•΄λ‹Ή μžμ›(URI)에 λŒ€ν•œ CRUD Operation을 μ μš©ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

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

  • μžμ› (Resource): URI

    • λͺ¨λ“  μžμ›μ— κ³ μœ ν•œ IDκ°€ 쑴재, 이 μžμ›μ€ Server에 μ‘΄μž¬ν•œλ‹€.
      μžμ›μ„ κ΅¬λ³„ν•˜λŠ” IDλŠ” β€˜/users/signin’와 같은 HTTP URI λ‹€.
      ClientλŠ” URIλ₯Ό μ΄μš©ν•΄μ„œ μžμ›μ„ μ§€μ •ν•˜κ³  ν•΄λ‹Ή μžμ›μ˜ μƒνƒœ(정보)에 λŒ€ν•œ μ‘°μž‘μ„ Server에 μš”μ²­ν•œλ‹€.
  • ν–‰μœ„ (Verb): HTTP Method

    • HTTP ν”„λ‘œν† μ½œμ˜ Method(GET, POST, PUT, DELETE)λ₯Ό μ‚¬μš©ν•œλ‹€.
  • ν‘œν˜„ (Representation of Resource)

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

REST의 ν•„μš”μ„±

  • λΆ„μ‚° μ‹œμŠ€ν…œμ„ μœ„ν•¨μ΄λ‹€.
    κ±°λŒ€ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λͺ¨λ“ˆ, κΈ°λŠ₯λ³„λ‘œ λΆ„λ¦¬ν•˜κΈ° μ‰¬μ›Œμ‘Œλ‹€. RESTful APIλ₯Ό μ„œλΉ„μŠ€ν•˜κΈ°λ§Œ ν•˜λ©΄ μ–΄λ–€ λ‹€λ₯Έ λͺ¨λ“ˆ λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜λ“€μ΄λΌλ„ RESTful APIλ₯Ό 톡해 μƒν˜Έκ°„μ— 톡신을 ν•  수 μžˆλ‹€.

  • WEBλΈŒλΌμš°μ € μ™Έμ˜ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μœ„ν•¨μ΄λ‹€(λ©€ν‹° ν”Œλž«νΌ).
    졜근의 μ„œλ²„ ν”„λ‘œκ·Έλž¨μ€ λ‹€μ–‘ν•œ λΈŒλΌμš°μ €μ™€ μ•ˆλ“œλ‘œμ΄ν°, 아이폰과 같은 λͺ¨λ°”일 λ””λ°”μ΄μŠ€μ—μ„œλ„ 톡신을 ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
    μ΄λŸ¬ν•œ λ©€ν‹° ν”Œλž«νΌμ— λŒ€ν•œ 지원을 μœ„ν•΄ μ„œλΉ„μŠ€ μžμ›μ— λŒ€ν•œ μ•„ν‚€ν…μ²˜λ₯Ό μ„Έμš°κ³  μ΄μš©ν•˜λŠ” 방법을 λͺ¨μƒ‰ν•œ κ²°κ³Ό, REST에 관심을 κ°€μ§€κ²Œ λ˜μ—ˆλ‹€.

REST의 μž₯단점

πŸ˜ƒ μž₯점

  • HTTP ν”„λ‘œν† μ½œμ˜ 인프라 기반으둜 μ„€κ³„λ˜κΈ° λ•Œλ¬Έμ— REST API μ‚¬μš©μ„ μœ„ν•œ λ³„λ„μ˜ 인프라가 ν•„μš”μΉ˜ μ•Šλ‹€.
  • HTTP ν”„λ‘œν† μ½œμ˜ ν‘œμ€€μ„ μ΅œλŒ€ν•œ ν™œμš©ν•˜μ—¬ μ—¬λŸ¬ 좔가적인 μž₯점을 ν•¨κ»˜ κ°€μ Έκ°ˆ 수 있게 ν•΄μ€€λ‹€.
  • HTTP ν‘œμ€€ ν”„λ‘œν† μ½œμ— λ”°λ₯΄λŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.
  • REST API λ©”μ‹œμ§€κ°€ μ˜λ„ν•˜λŠ” λ°”λ₯Ό λͺ…ν™•ν•˜κ²Œ λ‚˜νƒ€λ‚΄λ―€λ‘œ μ˜λ„ν•˜λŠ” λ°”λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  수 μžˆλ‹€.
  • μ—¬λŸ¬κ°€μ§€ μ„œλΉ„μŠ€ λ””μžμΈμ—μ„œ 생길 수 μžˆλŠ” 문제λ₯Ό μ΅œμ†Œν™”ν•œλ‹€.
  • μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈμ˜ 역할을 λͺ…ν™•ν•˜κ²Œ λΆ„λ¦¬ν•œλ‹€.

😰 단점

  • μ •ν™•ν•œ ν‘œμ€€ κ·œμ•½μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. κ΄€λ¦¬μ˜ 어렀움과 쒋은(곡식화 된) API λ””μžμΈ κ°€μ΄λ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•˜λ©°, REST APIλŠ” λ§Žμ€ μ‚¬λžŒλ“€μ΄ ν•˜λ‚˜μ”© μŒ“μ•„μ˜¬λ¦¬λŠ” β€˜μ •λ‹Ήν™” 된 약속듀’ 둜 κ΅¬μ„±λ˜κ³  μ›€μ§μ΄κ²Œ λœλ‹€.
  • HTTP Method의 μ’…λ₯˜μ™€ ν˜•νƒœκ°€ μ œν•œμ μ΄λ‹€.

REST API(RESTful API) λž€?

  • REST API의 μ •μ˜

    • REST API(RESTful API)λž€ REST μ•„ν‚€ν…μ²˜μ˜ μ œμ•½ 쑰건을 μ€€μˆ˜ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€λ₯Ό λœ»ν•œλ‹€.

    • 졜근 OpenAPI(λˆ„κ΅¬λ‚˜ μ‚¬μš©ν•  수 μžˆλ„λ‘ 곡개된 API: ꡬ글 맡, 곡곡 데이터 λ“±), 마이크둜 μ„œλΉ„μŠ€(ν•˜λ‚˜μ˜ 큰 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ—¬λŸ¬ 개의 μž‘μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ μͺΌκ°œμ–΄ λ³€κ²½κ³Ό 쑰합이 κ°€λŠ₯ν•˜λ„λ‘ λ§Œλ“  μ•„ν‚€ν…μ²˜) 등을 μ œκ³΅ν•˜λŠ” 업체 λŒ€λΆ€λΆ„μ€ REST APIλ₯Ό μ œκ³΅ν•œλ‹€.

REST API의 νŠΉμ§•

  • 사내 μ‹œμŠ€ν…œλ“€λ„ REST 기반으둜 μ‹œμŠ€ν…œμ„ λΆ„μ‚°ν•΄ ν™•μž₯μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ λ†’μ—¬ μœ μ§€λ³΄μˆ˜ 및 μš΄μš©μ„ νŽΈλ¦¬ν•˜κ²Œ ν•  수 μžˆλ‹€.

  • RESTλŠ” HTTP ν‘œμ€€μ„ 기반으둜 κ΅¬ν˜„ν•˜λ―€λ‘œ, HTTPλ₯Ό μ§€μ›ν•˜λŠ” ν”„λ‘œκ·Έλž¨ μ–Έμ–΄λ‘œ ν΄λΌμ΄μ–ΈνŠΈ, μ„œλ²„λ₯Ό κ΅¬ν˜„ν•  수 μžˆλ‹€.

  • REST APIλ₯Ό μ œμž‘ν•˜λ©΄ 델파이 ν΄λΌμ΄μ–ΈνŠΈ 뿐 μ•„λ‹ˆλΌ, μžλ°”, C#, μ›Ή 등을 μ΄μš©ν•΄ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ œμž‘ν•  수 μžˆλ‹€.

RESTful API의 λͺ©μ 

  • μ΄ν•΄ν•˜κΈ° 쉽고 μ‚¬μš©ν•˜κΈ° μ‰¬μš΄ REST APIλ₯Ό λ§Œλ“œλŠ” 것

  • RESTfulν•œ APIλ₯Ό κ΅¬ν˜„ν•˜λŠ” 근본적인 λͺ©μ μ΄ μ„±λŠ₯ ν–₯상에 μžˆλŠ” 것이 μ•„λ‹ˆλ‹€. 일관적인 μ»¨λ²€μ…˜μ„ ν†΅ν•œ API의 이해도 및 ν˜Έν™˜μ„±μ„ λ†’μ΄λŠ” 것이 μ£Ό λͺ©μ μ΄λ‹€.

REST API 섀계 κ·œμΉ™

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

2) URI λ§ˆμ§€λ§‰ 문자둜 μŠ¬λž˜μ‹œ(/)λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€

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

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

5) URI κ²½λ‘œλŠ” μ†Œλ¬Έμžκ°€ μ ν•©ν•©λ‹ˆλ‹€
λŒ€μ†Œλ¬Έμžμ— 따라 λ‹€λ₯Έ λ¦¬μ†ŒμŠ€λ‘œ μΈμ‹ν•˜κ²Œ 되기 λ•Œλ¬Έμ΄λ‹€. RFC 3986(URI 문법 ν˜•μ‹)은 URI μŠ€ν‚€λ§ˆμ™€ 호슀트λ₯Ό μ œμ™Έν•˜κ³ λŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜λ„λ‘ κ·œμ •ν•˜κ³  μžˆλ‹€.

6) 파일 ν™•μž₯μžλŠ” URI에 ν¬ν•¨μ‹œν‚€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

7) λ¦¬μ†ŒμŠ€ κ°„μ—λŠ” μ—°κ΄€ 관계가 μžˆλŠ” 경우
πŸ‘‰ /λ¦¬μ†ŒμŠ€λͺ…/λ¦¬μ†ŒμŠ€ ID/관계가 μžˆλŠ” λ‹€λ₯Έ λ¦¬μ†ŒμŠ€λͺ…


πŸ“ Reference

  1. https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
  2. https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80
  3. https://www.redhat.com/ko/topics/api/what-is-a-rest-api
profile
Backend Developer - "Growth itself contains the germ of happiness"

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보