REST API의 πŸΆμ‰¬μš΄ μ„€λͺ…

Professor Jeon μ „κ΅μˆ˜λ‹˜Β·2022λ…„ 8μ›” 5일
13

REST API

: Representational State Transfer

REST 기반의 APIκ°€ κ΅¬ν˜„λ˜μ—ˆλ‹€λŠ” 뜻으둜, μ›Ήμ—μ„œ μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ‚˜ μžμ›(Resorce)을 HTTP URI둜 ν‘œν˜„ν•˜κ³  HTTP ν”„λ‘œν† μ½œμ„ 톡해 μš”μ²­κ³Ό 응닡을 μ •μ˜ν•˜λŠ” 방식이닀.

RMM

: Richardson Maturity Model

λ¦¬μ°¨λ“œμŠ¨μ˜ μ„±μˆ™λ„ λͺ¨λΈμ΄μž REST APIλ₯Ό λ””μžμΈν•˜λŠ” 방법이닀. 0~3λ‹¨κ³„λ‘œ μ΄λ€„μ ΈμžˆμœΌλ©°, 3λ‹¨κ³„κΉŒμ§€μ˜ κ΅¬ν˜„μ€ λ‹€μ†Œ μ–΄λ €μ›Œμ„œ 2λ‹¨κ³„κΉŒμ§€ κ΅¬ν˜„ν•΄λ„ μ™„λ²½ν•˜κ²Œ 좩쑱된 REST API라고 ν•  수 μžˆλ‹€.

0단계 - HTTP μ‚¬μš©

: HTTP의 μš”μ²­κ³Ό 응닡에 따라 μ‚¬μš©ν•œλ‹€. 
  ν•˜λ‚˜μ˜ URI에 ν•˜λ‚˜μ˜ HTTP λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.
  (보톡은 POSTλ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ 2λ‹¨κ³„κΉŒμ§€ μΆ©μ‘±ν•˜λ €λ©΄ 2λ‹¨κ³„μ˜ μ„€λͺ…을 보라.)

1단계 - κ°œλ³„ λ¦¬μ†ŒμŠ€μ™€μ˜ 톡신 μ€€μˆ˜

: λͺ¨λ“  μžμ›μ€ 각기 λ§žλŠ” μ—”λ“œν¬μΈνŠΈ(Endpoint)λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  μš”μ²­μ— λ”°λ₯Έ μ‘λ‹΅μœΌλ‘œ μžμ›μ„ 전달할 λ•Œ 성곡/μ‹€νŒ¨ μ—¬λΆ€λ₯Ό ν¬ν•¨ν•΄μ„œ 응닡해야 ν•œλ‹€.
  * μ—”λ“œν¬μΈνŠΈλ₯Ό μž‘μ„±ν•  λ•ŒλŠ” 동사, HTTP λ©”μ†Œλ“œ, ν–‰μœ„λ¬˜μ‚¬ 등은 ν”Όν•˜κ³ , 
    λ¦¬μ†ŒμŠ€μ— 집쀑해 λͺ…ν™•ν•œ λͺ…사 ν˜•νƒœλ‘œ 이름을 μ§“λŠ”λ‹€.

2단계 - HTTP λ©”μ†Œλ“œ 원칙 μ€€μˆ˜

: CRUD에 맞게 μ μ ˆν•œ HTTP λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.
  그에 λ”°λ₯Έ μ μ ˆν•œ 응닡도 μ™€μ•Όν•œλ‹€.
  * CRUDλž€?
      Create - POST(생성)
      Read   - GET(쑰회)
      Update - PUT(μˆ˜μ •)
      Delete - DELETE(μ‚­μ œ)
  * μ μ ˆν•œ μ‘λ‹΅μ΄λž€?
      1Γ—Γ—(정보) - μš”μ²­μ„ λ°›μ•˜μœΌλ©°, ν”„λ‘œμ„ΈμŠ€λ₯Ό κ³„μ†ν•œλ‹€.
      2Γ—Γ—(성곡) - μš”μ²­μ„ μ„±κ³΅μ μœΌλ‘œ λ°›κ³  μΈμ‹ν–ˆμœΌλ©°, μˆ˜μš©ν•œλ‹€.
      3Γ—Γ—(λ¦¬λ‹€μ΄λ ‰μ…˜) - μš”μ²­ μ™„λ£Œλ₯Ό μœ„ν•΄ μΆ”κ°€μž‘μ—… μ‘°μΉ˜κ°€ ν•„μš”ν•˜λ‹€.
      4Γ—Γ—(ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜) - μš”μ²­ 문법이 잘λͺ»λ˜μ—ˆκ±°λ‚˜ μ²˜λ¦¬κ°€ λΆˆκ°€ν•˜λ‹€.
      5Γ—Γ—(μ„œλ²„μ˜€λ₯˜) - μ„œλ²„κ°€ λͺ…λ°±νžˆ μœ νš¨ν•œ μš”μ²­μ— λŒ€ν•΄ μ‹€νŒ¨ν–ˆλ‹€.
        
      ex) 404 Not FoundλŠ” ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜μ˜ λŒ€ν‘œμ μΈ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

3단계 - HATEOAS 원칙 μ€€μˆ˜


: HATEOAS(Hypertext As The Engine Of Application State)둜 ν‘œν˜„λ˜λŠ” ν•˜μ΄νΌ λ―Έλ””μ–΄ μ»¨νŠΈλ‘€μ„ μ μš©ν•œ 것이닀.
μš”μ²­μ€ 2단계와 λ‚΄μš©μ΄ κ°™μ§€λ§Œ, 응닡은 λ¦¬μ†ŒμŠ€ URIλ₯Ό ν¬ν•¨ν•œ 링크λ₯Ό μ‚½μž…ν•΄μ•Ό ν•œλ‹€.

Open API

λˆ„κ΅¬μ—κ²Œλ‚˜ μ—΄λ €μžˆλŠ” API. 단, λŒ€κ°œ μ΄μš©νšŸμˆ˜κ°€ μ •ν•΄μ Έμžˆκ³ , μ‚¬μ΄νŠΈ 별 이용 μˆ˜μΉ™μ— 따라 μ œν•œμ‚¬ν•­λ„ μžˆλ‹€.

API Key

μ„œλ²„μ˜ 문을 μ—¬λŠ” μ—΄μ‡ . 가끔 ν•„μš”ν•˜μ§€ μ•Šμ„ λ•Œλ„ μžˆμ§€λ§Œ, μ„œλ²„μ˜ νŠΉμ„± 상 μš΄μ˜μ— λΉ„μš©μ΄ λ“€κΈ° λ•Œλ¬Έμ— μ•„λ¬΄λŸ° 쑰건 없이 읡λͺ…μ˜ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 정보λ₯Ό μ œκ³΅ν•˜λŠ” 일이 μΌλ°˜μ μ΄μ§€λŠ” μ•Šλ‹€.

- μ‚¬μš©λ²•
                 데이터 μš”μ²­ μ‹œ keyλ₯Ό 같이 전달함.
둜그인 이용자 ---------------------------------------> μ„œλ²„
            <--------------------------------------- 
                 μžμ›μ— μ ‘κ·Όν•  수 μžˆλŠ” κΆŒν•œμ„ key
                         ν˜•νƒœλ‘œ μ œκ³΅ν•¨.

0개의 λŒ“κΈ€