πŸ”¬Computer Science/λ„€νŠΈμ›Œν¬

TIL) REST API, REST APIλ₯Ό λ””μžμΈν•˜λŠ” 방법

hellohailie 2022. 6. 10. 15:05

 

API의 λŒ€ν‘œμ μΈ μ•„ν‚€ν…μ²˜μΈ REST API

μ–΄λ–»κ²Œ μš”μ²­κ³Ό 응닡을 ν•˜λŠ” 것이 λ°”λžŒμ§ν•œ 방법인가?

πŸ‘‡πŸ‘‡

REST API

“Representational State Transfer”의 μ•½μž

μ›Ήμ—μ„œ μ‚¬μš©λ˜λŠ” λ°μ΄ν„°λ‚˜ μžμ›(Resource)을 HTTP URI둜 ν‘œν˜„ν•˜κ³ , HTTP ν”„λ‘œν† μ½œμ„ 톡해 μš”μ²­κ³Ό 응닡을 μ •μ˜ν•˜λŠ” 방식을 λ§ν•œλ‹€.

 

HTTP ν”„λ‘œν† μ½œμ„ 기반으둜 μš”μ²­κ³Ό 응닡에 따라 λ¦¬μ†ŒμŠ€λ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•΄μ„œλŠ” μ•Œμ•„λ³΄κΈ° 쉽고 잘 μž‘μ„±λœ λ©”λ‰΄νŒμ΄ ν•„μš”ν•œλ°, 이 역할을 APIκ°€ μˆ˜ν–‰ν•΄μ•Ό ν•˜λ―€λ‘œ λͺ¨λ‘κ°€ 잘 μ•Œμ•„λ³Ό 수 μžˆλ„λ‘ μž‘μ„±ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

 

둜이 ν•„λ”© (Roy Fielding)의 λ°•μ‚¬ν•™μœ„ λ…Όλ¬Έμ—μ„œ μ›Ή(http)의 μž₯점을 μ΅œλŒ€ν•œ ν™œμš©ν•  수 μžˆλŠ” μ•„ν‚€ν…μ²˜λ‘œμ¨ 처음 μ†Œκ°œλ˜μ—ˆλ‹€.


REST APIλ₯Ό λ””μžμΈν•˜λŠ” 방법

λ ˆμ˜€λ‚˜λ₯΄λ“œ λ¦¬μ°¨λ“œμŠ¨(Leonard Richardson)은 REST APIλ₯Ό 잘 μ μš©ν•˜κΈ° μœ„ν•œ 4단계 λͺ¨λΈ

Richardson μ„±μˆ™λ„ λͺ¨λΈ (RMM)

0단계 : HTTP μ‚¬μš©

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

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

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

 

πŸ‘‰ 이 λͺ¨λ“  단계λ₯Ό μΆ©μ‘±ν•΄μ•Ό REST APIλΌκ³ λŠ” ν•˜μ§€λ§Œ, μ‹€μ œλ‘œλŠ” 2λ‹¨κ³„κΉŒμ§€λ§Œ μ μš©ν•΄λ„ 쒋은 API λ””μžμΈμ΄λΌκ³  λ³Ό 수 있고, 이런 경우λ₯Ό HTTP API라고 λΆ€λ₯Έλ‹€. 


REST μ„±μˆ™λ„ λͺ¨λΈ - 0단계

0λ‹¨κ³„μ—μ„œλŠ” λ‹¨μˆœνžˆ HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜κΈ°λ§Œ 해도 λœλ‹€.

λ¬Όλ‘  이 경우, ν•΄λ‹Ή APIλ₯Ό REST API라고 ν•  μˆ˜λŠ” μ—†μœΌλ©°, 0λ‹¨κ³„λŠ” REST APIλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ κΈ°λ³Έ 단계이닀. 

 

ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλΉ„μŠ€λ³„λ‘œ μœ μΌν•œ URL 끝점에 HTTP POST μš”μ²­μ„ ν•˜μ—¬ μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•œλ‹€.

μš”μ²­μ„ ν•  λ•Œλ§ˆλ‹€ μ–΄λ–€ μ•‘μ…˜μ„ μˆ˜ν–‰ν• μ§€, κ·Έ λŒ€μƒ(예: λΉ„μ¦ˆλ‹ˆμŠ€ 객체)은 무엇인지 μ§€μ •ν•˜κ³ , ν•„μš”ν•œ λ§€κ°œλ³€μˆ˜λ„ ν•¨κ»˜ μ „λ‹¬ν•œλ‹€.

 

0 λ‹¨κ³„μ—μ„œλŠ” API μ„œλΉ„μŠ€λ₯Ό μœ„ν•΄ 단 ν•˜λ‚˜μ˜ endpoint λ₯Ό μ‚¬μš©ν•œλ‹€.

그리고 μ „λ‹¬λ˜λŠ” μ„œλ‘œ λ‹€λ₯Έ λ§€κ°œλ³€μˆ˜λ₯Ό ν†΅ν•΄μ„œ ν•˜λ‚˜μ˜ endpoint둜 μ—¬λŸ¬ λ™μž‘μ„ ν•˜κ²Œ λœλ‹€.

λ§€κ°œλ³€μˆ˜λ₯Ό Body 둜 μ „λ‹¬ν•˜κΈ° μœ„ν•΄ HTTP method λŠ” POST κ°€ λœλ‹€.

 

 


REST μ„±μˆ™λ„ λͺ¨λΈ - 1단계

1λ‹¨κ³„μ—μ„œλŠ” κ°œλ³„ λ¦¬μ†ŒμŠ€(Resource)μ™€μ˜ 톡신을 μ€€μˆ˜ν•΄μ•Ό ν•œλ‹€. 

 

λͺ¨λ“  μžμ›μ€ κ°œλ³„ λ¦¬μ†ŒμŠ€μ— λ§žλŠ” μ—”λ“œν¬μΈνŠΈ(Endpoint)λ₯Ό μ‚¬μš©ν•΄μ•Όν•˜λ©° μš”μ²­ν•˜κ³  λ°›λŠ” μžμ›μ— λŒ€ν•œ 정보λ₯Ό μ‘λ‹΅μœΌλ‘œ 전달해야 ν•œλ‹€λŠ” 것이 1λ‹¨κ³„μ˜ 핡심이닀.

ν΄λΌμ΄μ–ΈνŠΈλŠ” μˆ˜ν–‰ν•  μ•‘μ…˜κ³Ό λ§€κ°œλ³€μˆ˜κ°€ μ§€μ •λœ POST μš”μ²­μ„ ν•œλ‹€.

 

HTTP headers 에 Content-Type μ΄λ‚˜ Cache κ΄€λ ¨ 정보λ₯Ό μ „ν˜€ μ œκ³΅ν•˜κ³  μžˆμ§€ μ•Šλ‹€.

 

βž₯ μš”μ²­ν•˜λŠ” λ¦¬μ†ŒμŠ€κ°€ 무엇인지에 따라 각기 λ‹€λ₯Έ μ—”λ“œν¬μΈνŠΈλ‘œ κ΅¬λΆ„ν•˜μ—¬ μ‚¬μš©ν–ˆλ‹€. 

 

- μ˜ˆμ•½ κ°€λŠ₯ν•œ μ‹œκ°„ ν™•μΈμ΄λΌλŠ” μš”μ²­μ˜ μ‘λ‹΅μœΌλ‘œ λ°›κ²Œ λ˜λŠ” μžμ›(λ¦¬μ†ŒμŠ€)은 ν—ˆμ€€μ΄λΌλŠ” μ˜μ‚¬μ˜ μ˜ˆμ•½ κ°€λŠ₯ν•œ μ‹œκ°„λŒ€μ΄λ‹€.

κ·Έλž˜μ„œ μš”μ²­ μ‹œ /doctors/ν—ˆμ€€μ΄λΌλŠ” μ—”λ“œν¬μΈνŠΈλ₯Ό μ‚¬μš©ν–ˆλ‹€. 

- νŠΉμ • μ‹œκ°„μ— μ˜ˆμ•½ν•˜κ²Œ 되면, μ‹€μ œ slotsλΌλŠ” λ¦¬μ†ŒμŠ€μ˜ 123μ΄λΌλŠ” idλ₯Ό 가진 λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜κΈ° λ•Œλ¬Έμ—, ν•˜λ‹¨μ˜ νŠΉμ • μ‹œκ°„μ— μ˜ˆμ•½μ΄λΌλŠ” μš”μ²­μ—μ„œλŠ” /slots/123으둜 μ‹€μ œ λ³€κ²½λ˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό μ—”λ“œν¬μΈνŠΈλ‘œ μ‚¬μš©ν–ˆλ‹€. 

 

πŸ‘‰ μ–΄λ–€ λ¦¬μ†ŒμŠ€λ₯Ό λ³€ν™”μ‹œν‚€λŠ”μ§€ ν˜Ήμ€ μ–΄λ–€ 응닡이 μ œκ³΅λ˜λŠ”μ§€μ— 따라 각기 λ‹€λ₯Έ μ—”λ“œν¬μΈνŠΈλ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ—, μ μ ˆν•œ μ—”λ“œν¬μΈνŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 것이 μ€‘μš”!! πŸ‘‰ μ—”λ“œν¬μΈνŠΈ μž‘μ„± μ‹œμ—λŠ” 동사, HTTP λ©”μ„œλ“œ, ν˜Ήμ€ μ–΄λ–€ ν–‰μœ„μ— λŒ€ν•œ 단어 μ‚¬μš©μ€ μ§€μ–‘ν•˜κ³ , λ¦¬μ†ŒμŠ€μ— 집쀑해 λͺ…사 ν˜•νƒœμ˜ λ‹¨μ–΄λ‘œ μž‘μ„±ν•˜λŠ” 것이 λ°”λžŒμ§ν•œ 방법이닀. 

πŸ‘‰ μš”μ²­μ— λ”°λ₯Έ μ‘λ‹΅μœΌλ‘œ λ¦¬μ†ŒμŠ€λ₯Ό 전달할 λ•Œμ—λ„ μ‚¬μš©ν•œ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 정보와 ν•¨κ»˜ λ¦¬μ†ŒμŠ€ μ‚¬μš©μ— λŒ€ν•œ 성곡/μ‹€νŒ¨ μ—¬λΆ€λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€.  

 


REST μ„±μˆ™λ„ λͺ¨λΈ - 2단계

CRUD에 맞게 μ μ ˆν•œ HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것에 쀑점을 λ‘”λ‹€. 

μ•žμ„œ 0단계와 1단계 μ˜ˆμ‹œμ—μ„œλŠ” λͺ¨λ“  μš”μ²­μ„ CRUD(Create, Read, Update, Delete)와 상관없이 POST λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆλŠ”λ°, 2λ‹¨κ³„μ—μ„œλŠ” CRUD에 λ”°λ₯Έ μ ν•©ν•œ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€!

 

Resource λ₯Ό URI 둜 μ‹λ³„ν•˜κ³ , HTTP method λ₯Ό μ‚¬μš©ν•΄μ„œ CRUD λ₯Ό ν‘œν˜„ν•˜λŠ”λ°,

2 λ‹¨κ³„μ—μ„œλŠ” HTTP method 인 GET, POST, PUT, DELETE λ₯Ό μ‚¬μš©ν•΄μ„œ CRUD λ₯Ό λ‚˜νƒ€λ‚΄λ©° λ©”μ‹œμ§€μ— Status Code 도 담겨 λ°˜ν™˜λœλ‹€. μ„±μˆ™λ„ 2 λ‹¨κ³„μ—μ„œ GET 은 μƒνƒœλ₯Ό λ³€ν™”μ‹œν‚€μ§€ μ•ŠλŠ” μ•ˆμ „ν•œ Action이 λœλ‹€. GET 은 μ•ˆμ „ν•˜κ²Œ μ–΄λ–€ μˆœμ„œλ‘œλ“  μ–Όλ§ˆλ“ μ§€ ν˜ΈμΆœν•  수 있고, 맀번 같은 κ²°κ³Ό(λ©±λ“±μ„±)λ₯Ό 얻도둝 ν•œλ‹€. 즉, Cache λ₯Ό μ μš©ν•΄μ„œ μ‚¬μš©μž μž…μž₯μ—μ„œ μ„±λŠ₯ ν–₯상을 λŠλ‚„ 수 μžˆλ‹€.

 

μ„œλΉ„μŠ€λŠ” HTTP 동사λ₯Ό μ΄μš©ν•΄μ„œ μ•‘μ…˜μ„ μˆ˜ν–‰ν•˜κ³ (예: GET은 쑰회, POSTλŠ” 생성, PUT은 μˆ˜μ •), μš”μ²­ 쿼리 λ§€κ°œλ³€μˆ˜ 및 λ³Έλ¬Έ, ν•„μš” μ‹œ λ§€κ°œλ³€μˆ˜λ₯Ό μ§€μ •ν•œλ‹€. 덕뢄에 μ„œλΉ„μŠ€λŠ” GET μš”μ²­μ„ μΊμ‹±ν•˜λŠ” λ“± μ›Ή 인프라λ₯Ό ν™œμš©ν•  수 μžˆλ‹€.

 

μ„±μˆ™λ„ 2 λ‹¨κ³„μ—μ„œλŠ” 더 이상 URI 에 action 이 담기지 μ•ŠλŠ”λ‹€. 그리고 멱등성을 보μž₯ν•˜λŠ” GET μ—λŠ” Cache κ°€ 적용되며, Response 에 HTTP Status Code κ°€ 의미있게 λ°˜ν™˜λœλ‹€. HTTP Status Code λ₯Ό λͺ¨λ‘ ν™œμš©ν•  ν•„μš”λŠ” μ—†λ‹€.

ν΄λΌμ΄μ–ΈνŠΈ 개발자의 μž…μž₯μ—μ„œ μžμ‹ μ˜ μš”μ²­μ΄ 성곡(200 OK) 인지 μ‹€νŒ¨μΈμ§€λ§Œ μ•Œκ³  μ‹Άμ–΄ν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.

μ‹€νŒ¨λΌλ©΄ ν΄λΌμ΄μ–ΈνŠΈ 잘λͺ»(400 Bad Request) 인지 μ„œλ²„ 잘λͺ»(500 Internal Server Error) 정도면 μΆ©λΆ„ν•˜λ‹€κ³  ν•œλ‹€. λ‹€λ§Œ, μ‹€νŒ¨λΌλ©΄ Body 에 μ™œ μ‹€νŒ¨ν–ˆλŠ”μ§€μ— λŒ€ν•œ 정보λ₯Ό 보내 μ£ΌλŠ” 것이 μ’‹λ‹€.

 

 

 

- μ˜ˆμ•½ κ°€λŠ₯ν•œ μ‹œκ°„μ„ ν™•μΈν•œλ‹€λŠ” 것은 μ˜ˆμ•½ κ°€λŠ₯ν•œ μ‹œκ°„μ„ 쑰회(READ)ν•˜λŠ” ν–‰μœ„

βž₯ 쑰회(READ)ν•˜κΈ° μœ„ν•΄μ„œλŠ” GET λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ²­ν•œλ‹€. 

(μ΄λ•Œ GET λ©”μ„œλ“œλŠ” bodyλ₯Ό 가지지 μ•ŠκΈ° λ•Œλ¬Έμ— query parameterλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•„μš”ν•œ λ¦¬μ†ŒμŠ€λ₯Ό μ „λ‹¬ν•œλ‹€.)

 

- νŠΉμ • μ‹œκ°„μ— μ˜ˆμ•½ν•œλ‹€λŠ” 것은 ν•΄λ‹Ή νŠΉμ • μ‹œκ°„μ— μ˜ˆμ•½μ„ 생성(CREATE)ν•œλ‹€λŠ” 것

βž₯ μ˜ˆμ•½μ„ 생성(CREATE)ν•˜κΈ° μœ„ν•΄μ„œλŠ” POST λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ²­ν•œλ‹€. 

(POST μš”μ²­μ— λŒ€ν•œ 응닡은 μƒˆλ‘­κ²Œ μƒμ„±λœ λ¦¬μ†ŒμŠ€λ₯Ό 보내주기 λ•Œλ¬Έμ—, 응닡 μ½”λ“œλŠ” 201 Created 둜 λͺ…ν™•ν•˜κ²Œ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

그리고 κ΄€λ ¨ λ¦¬μ†ŒμŠ€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈκ°€ Location 헀더에 μž‘μ„±λœ URIλ₯Ό 톡해 확인할 수 μžˆλ„λ‘ ν•œλ‹€. )

 


<HTTP λ©”μ„œλ“œ μ‚¬μš© κ·œμΉ™>

 

  • GET λ©”μ„œλ“œ 같은 κ²½μš°λŠ” μ„œλ²„μ˜ 데이터λ₯Ό λ³€ν™”μ‹œν‚€μ§€ μ•ŠλŠ” μš”μ²­μ— μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  • POST λ©”μ„œλ“œλŠ” μš”μ²­λ§ˆλ‹€ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€λ₯Ό μƒμ„±ν•˜κ³  PUT λ©”μ„œλ“œλŠ” μš”μ²­λ§ˆλ‹€ 같은 λ¦¬μ†ŒμŠ€λ₯Ό λ°˜ν™˜ν•œλ‹€. μ΄λ ‡κ²Œ 맀 μš”μ²­λ§ˆλ‹€ 같은 λ¦¬μ†ŒμŠ€λ₯Ό λ°˜ν™˜ν•˜λŠ” νŠΉμ§•μ„ λ©±λ“±(idempotent)ν•˜λ‹€κ³  ν•œλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 멱등성을 κ°€μ§€λŠ” λ©”μ„œλ“œ PUTκ³Ό 그렇지 μ•Šμ€ λ©”μ„œλ“œPOSTλŠ” κ΅¬λΆ„ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  • PUT λ©”μ„œλ“œμ™€ PATCH λ©”μ„œλ“œλ„ κ΅¬λΆ„ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. PUT은 ꡐ체, PATCHλŠ” μˆ˜μ •μ˜ μš©λ„λ‘œ μ‚¬μš©ν•œλ‹€.

 

πŸ‘‰ APIλ₯Ό μž‘μ„±ν•  λ•Œ, REST μ„±μˆ™λ„ λͺ¨λΈμ˜ 2λ‹¨κ³„κΉŒμ§€ μ μš©ν•˜λ©΄ λŒ€μ²΄μ μœΌλ‘œ 잘 μž‘μ„±λœ API라고 ν•œλ‹€.

둜이 필딩은 μ•žμ„œ μ΄μ•ΌκΈ°ν•œ 바와 같이 3λ‹¨κ³„κΉŒμ§€ λ§Œμ‘±ν•˜μ§€ λͺ»ν•œ APIλŠ” REST APIκ°€ μ•„λ‹Œ HTTP API라고 λΆˆλŸ¬μ•Ό ν•œλ‹€κ³  μ£Όμž₯ν•˜μ§€λ§Œ, λͺ¨λ²”적인 API λ””μžμΈμ΄λΌκ³  ν•˜λŠ” 것도 REST μ„±μˆ™λ„ λͺ¨λΈμ˜ 3λ‹¨κ³„κΉŒμ§€ μ μš©ν•œ κ²½μš°λŠ” λ“œλ¬Όλ‹€κ³  ν•œλ‹€.

κ·Έλž˜μ„œ 3λ‹¨κ³„κΉŒμ§€ 무쑰건적으둜 λͺ¨λ‘ μ μš©ν•΄μ•Ό ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€.

 

 

HTTP API

 

 

<HTTP API λ””μžμΈμ„ 잘 ν•˜κΈ° μœ„ν•΄ κΌ­ κΈ°μ–΅ν•΄μ•Ό ν•  5가지 λ©”μ„œλ“œ>

2022.06.09 - [λ„€νŠΈμ›Œν¬] - TIL) μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•„ν‚€ν…μ²˜, API, ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ 톡신, HTTP, ν”„λ‘œν† μ½œμ΄λž€?

 


REST μ„±μˆ™λ„ λͺ¨λΈ - 3단계

 

HATEOAS(Hypertext As The Engine Of Application State)λΌλŠ” μ•½μ–΄λ‘œ ν‘œν˜„λ˜λŠ” ν•˜μ΄νΌλ―Έλ””μ–΄ μ»¨νŠΈλ‘€μ„ μ μš©ν•œλ‹€. 

3λ‹¨κ³„μ˜ μš”μ²­μ€ 2단계와 λ™μΌν•˜μ§€λ§Œ, 응닡에 λ¦¬μ†ŒμŠ€μ˜ URIλ₯Ό ν¬ν•¨ν•œ 링크 μš”μ†Œλ₯Ό μ‚½μž…ν•˜μ—¬ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

μ΄λ•Œ 응닡에 λ“€μ–΄κ°€κ²Œ λ˜λŠ” 링크 μš”μ†ŒλŠ” 응닡을 받은 λ‹€μŒμ— ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ μ•‘μ…˜λ“€μ„ μœ„ν•΄ λ§Žμ€ ν•˜μ΄νΌλ―Έλ””μ–΄ μ»¨νŠΈλ‘€μ„ ν¬ν•¨ν•˜κ³  μžˆλ‹€.

 

μ„œλΉ„μŠ€λ₯Ό HATEOAS(Hypertext As The Engine Of Application State, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ μ—”μ§„μœΌλ‘œμ„œμ˜ ν•˜μ΄νΌλ―Έλ””μ–΄) 원칙에 κΈ°λ°˜ν•˜μ—¬ μ„€κ³„ν•œλ‹€. HATEOASλŠ” GET μš”μ²­μœΌλ‘œ λ°˜ν™˜λœ λ¦¬μ†ŒμŠ€ ν‘œν˜„ν˜•μ— κ·Έ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ•‘μ…˜μ˜ 링크도 ν•¨κ»˜ λ³΄λ‚΄λŠ” 것이닀. κ°€λ Ή ν΄λΌμ΄μ–ΈνŠΈλŠ” GET μš”μ²­μœΌλ‘œ μ£Όλ¬Έ 데이터λ₯Ό μ‘°νšŒν•˜κ³  μ΄λ•Œ λ°˜ν™˜λœ ν‘œν˜„ν˜• λ‚΄λΆ€ 링크λ₯Ό μ΄μš©ν•΄μ„œ ν•΄λ‹Ή 주문을 μ·¨μ†Œν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. HATEOASλ₯Ό μ‚¬μš©ν•˜λ©΄ ν•˜λ“œ μ½”λ”©ν•œ URL을 ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œμ— μš±μ—¬λ„£μ§€ μ•Šμ•„λ„ λœλ‹€κ³  ν•œλ‹€. 

 

 

βž₯ν—ˆμ€€μ΄λΌλŠ” μ˜μ‚¬μ˜ μ˜ˆμ•½ κ°€λŠ₯ μ‹œκ°„μ„ ν™•μΈν•œ ν›„μ—λŠ” κ·Έ μ‹œκ°„λŒ€μ— μ˜ˆμ•½μ„ ν•  수 μžˆλŠ” 링크λ₯Ό μ‚½μž…ν•˜κ±°λ‚˜, νŠΉμ • μ‹œκ°„μ— μ˜ˆμ•½μ„ μ™„λ£Œν•˜κ³  λ‚˜μ„œλŠ” κ·Έ μ˜ˆμ•½μ„ λ‹€μ‹œ 확인할 수 μžˆλ„λ‘ 링크λ₯Ό μž‘μ„±ν•΄ 넣을 μˆ˜λ„ μžˆλ‹€. μ΄λ ‡κ²Œ 응닡 내에 μƒˆλ‘œμš΄ 링크λ₯Ό λ„£μ–΄ μƒˆλ‘œμš΄ κΈ°λŠ₯에 μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” 것이 3λ‹¨κ³„μ˜ 핡심 ν¬μΈνŠΈμž…λ‹ˆλ‹€.

λ§Œμ•½ ν΄λΌμ΄μ–ΈνŠΈ κ°œλ°œμžλ“€μ΄ μ‘닡에 담겨 μžˆλŠ” λ§ν¬λ“€μ„ λˆˆμ—¬κ²¨λ³Έλ‹€λ©΄, μ΄λŸ¬ν•œ λ§ν¬λ“€μ€ μ‘°κΈˆ 더 쉽고, 효율적으둜 λ¦¬μ†ŒμŠ€μ™€ κΈ°λŠ₯에 μ ‘κ·Όν•  수 있게 ν•˜λŠ” μš”μ†Œκ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

더보기

RESTλ₯Ό κ΅¬μ„±ν•˜λŠ” μŠ€νƒ€μΌ

- client-server

- stateless

- cache

- uniform interface

- layered system

- code-on-demand (optional)

 

μƒν˜Έμš΄μš©μ„±(interoperability)에 λŒ€ν•œ 집착

- Referer μ˜€νƒ€μ§€λ§Œ μ•ˆ κ³ μΉ¨

- charset 잘λͺ» 지은 μ΄λ¦„μ΄μ§€λ§Œ μ•ˆ κ³ μΉ¨

- HTTP μƒνƒœ μ½”λ“œ 416 포기함 (I'm a teapot)

- HTTP/0.9 아직도 지원함 (크둬, νŒŒμ΄μ–΄ν­μŠ€)

 

무쑰건 RESTλ₯Ό μ¨μ•Όν•˜λŠ”κ°€?

μ‹œμŠ€ν…œ 전체λ₯Ό ν†΅μ œν•  수 μžˆλ‹€κ³  μƒκ°ν•˜κ±°λ‚˜, 진화에 관심이 μ—†λ‹€λ©΄ REST에 λŒ€ν•΄ λ”°μ§€λŠλΌ μ‹œκ°„λ‚­λΉ„ν•˜μ§€ 마라. -by Roy Fielding

 


μ°Έκ³ )

 

2022.06.09 - [λ„€νŠΈμ›Œν¬] - TIL) μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•„ν‚€ν…μ²˜, API, ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ 톡신, HTTP, ν”„λ‘œν† μ½œμ΄λž€?

 

https://bentist.tistory.com/37

 

https://ohjongsung.io/2018/07/21/rest-api-%EC%84%B1%EC%88%99%EB%8F%84-%EB%AA%A8%EB%8D%B8-maturity-model

 

https://github.com/Microsoft/api-guidelines/blob/master/Guidelines.md

 

https://cloud.google.com/apis/design/resources?hl=ko

 

 

 

πŸ˜ƒ 잘λͺ»λœ κ°œλ… 전달이 μžˆλ‹€λ©΄ λŒ“κΈ€ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€. μ €μ˜ μ„±μž₯에 큰 도움이 λ©λ‹ˆλ‹€πŸ€“