[HTTP/Network] REST API

HannahhhΒ·2022λ…„ 8μ›” 5일
0

HTTP/Network

λͺ©λ‘ 보기
5/12

πŸ” REST API

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

μ‹λ‹Ήμ—μ„œ 식사λ₯Ό μ£Όλ¬Έν•˜κΈ° μœ„ν•΄ λ©”λ‰΄νŒμ΄ μžˆλŠ” 것과 같이, Client와 Server 사이에도 데이터와 λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜κ³ , μš”μ²­μ— λ”°λ₯Έ 응닡을 μ „λ‹¬ν•˜κΈ° μœ„ν•œ λ©”λ‰΄νŒμ΄ ν•„μš”ν•˜λ‹€. μ΄λ•Œ, HTTP ν”„λ‘œν† μ½œμ„ 기반으둜 μš”μ²­κ³Ό 응닡에 따라 λ¦¬μ†ŒμŠ€λ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•΄μ„œλŠ” μ•Œμ•„λ³΄κΈ° 쉽고 잘 μž‘μ„±λœ λ©”λ‰΄νŒμ΄ ν•„μš”ν•˜λ©°, 이 역할을 APIκ°€ μˆ˜ν–‰ν•œλ‹€.



πŸ‘€ REST API Design


μ•„λž˜λŠ” 둜이 ν•„λ”©μ˜ REST방법둠을 보닀 더 μ‹€μš©μ μœΌλ‘œ μ μš©ν•˜κΈ° μœ„ν•œ Richardson의 REST μ„±μˆ™λ„ λͺ¨λΈμ΄λ‹€.

REST μ„±μˆ™λ„ λͺ¨λΈμ€ 총 4λ‹¨κ³„λ‘œ λ‚˜λˆ„μ–΄μ§€λ©°, λͺ¨λ“  단계λ₯Ό 지킀기 μ–΄λ ΅κΈ° λ•Œλ¬Έμ— 2λ‹¨κ³„κΉŒμ§€λ§Œ μ μš©ν•΄λ„ 쒋은 API라고 λ³Ό 수 μžˆλ‹€.(HTTP API)



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

REST APIλ₯Ό μž‘μ„±ν•˜κΈ° μœ„ν•œ κΈ°λ³Έ λ‹¨κ³„λ‘œ, λ‹¨μˆœνžˆ HTTP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜κΈ°λ§Œ 해도 λœλ‹€.


μ•„λž˜λŠ” ν—ˆμ€€μ΄λΌλŠ” μ΄λ¦„μ˜ 주치의의 μ˜ˆμ•½ κ°€λŠ₯ν•œ μ‹œκ°„μ„ ν™•μΈν•˜κ³ , νŠΉμ • μ‹œκ°„μ— μ˜ˆμ•½ν•˜λŠ” 상황을 μ˜ˆμ‹œμ΄λ‹€.



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

κ°œλ³„ λ¦¬μ†ŒμŠ€μ™€μ˜ 톡신을 μ€€μˆ˜ν•΄μ•Όν•œλ‹€.

REST APIλŠ” μ›Ήμ—μ„œ μ‚¬μš©λ˜λŠ” λͺ¨λ“  λ°μ΄ν„°λ‚˜ μžμ›μ„ HTTP URI둜 ν‘œν˜„ν•˜κΈ° λ•Œλ¬Έμ— λͺ¨λ“  μžμ›μ€ κ°œλ³„ λ¦¬μ†ŒμŠ€μ— λ§žλŠ” μ—”λ“œ 포인트(Endpoint)λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λ©°, μš”μ²­ν•˜κ³  λ°›λŠ” μžμ›μ— λŒ€ν•œ 정보λ₯Ό μ‘λ‹΅μœΌλ‘œ 전달해야 ν•œλ‹€.


μœ„μ˜ 0λ‹¨κ³„μ—μ„œλŠ” μš”μ²­μ—μ„œμ˜ μ—”λ“œν¬μΈνŠΈλ‘œ λͺ¨λ‘ /appointmentλ₯Ό μ‚¬μš©ν–ˆμ§€λ§Œ, 1λ‹¨κ³„μ—μ„œλŠ” μ•„λž˜μ™€ 같이 μš”μ²­ν•˜λŠ” λ¦¬μ†ŒμŠ€κ°€ 무엇인지에 따라 각기 λ‹€λ₯Έ μ—”λ“œν¬μΈνŠΈλ‘œ κ΅¬λΆ„ν•˜μ—¬ μ‚¬μš©ν•œλ‹€.

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

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

  • μ—”λ“œν¬μΈνŠΈ μž‘μ„± μ‹œ 동사, HTTP λ©”μ„œλ“œ, ν–‰μœ„μ— λŒ€ν•œ 단어 μ‚¬μš©μ€ μ§€μ–‘ν•˜κ³ , λ¦¬μ†ŒμŠ€μ— 집쀑해 λͺ…사 ν˜•νƒœμ˜ 단어λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

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



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

CRUD(Create, Read, Update, Delete)에 맞게 μ μ ˆν•œ HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

CURD λ©”μ„œλ“œ?


μ•žμ„œ 0단계, 1단계 μ˜ˆμ‹œμ—μ„œλŠ” λͺ¨λ“  μš”μ²­μ„ CRUD와 상관없이 POST λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ³  있기 λ•Œλ¬Έμ— CRUD에 λ”°λ₯Έ μ ν•©ν•œ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•œ 것이 μ•„λ‹ˆλ‹€.

λ¨Όμ € μ˜ˆμ•½ κ°€λŠ₯ν•œ μ‹œκ°„μ„ ν™•μΈν•œλ‹€λŠ” 것은 μ˜ˆμ•½ κ°€λŠ₯ν•œ μ‹œκ°„μ„ 쑰회(READ)ν•˜λŠ” ν–‰μœ„λ₯Ό μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμ— GET λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄ μš”μ²­μ„ λ³΄λ‚΄λŠ”λ°, GET λ©”μ„œλ“œλŠ” bodyλ₯Ό 가지지 μ•ŠμœΌλ―€λ‘œ query parameterλ₯Ό μ‚¬μš©ν•΄ λ¦¬μ†ŒμŠ€λ₯Ό μ „λ‹¬ν•œλ‹€.

λ˜ν•œ, νŠΉμ • μ‹œκ°„μ— μ˜ˆμ•½ν•œλ‹€λŠ” 것은 ν•΄λ‹Ή νŠΉμ • μ‹œκ°„μ— μ˜ˆμ•½μ„ 생성(CREATE)ν•˜λŠ” ν–‰μœ„λ₯Ό μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμ—POST λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ²­μ„ 보내야 ν•œλ‹€.
μ΄λ•Œ,POST μš”μ²­μ— λŒ€ν•œ 응닡은 μƒˆλ‘­κ²Œ μƒμ„±λœ λ¦¬μ†ŒμŠ€λ₯Ό 보내주기 λ•Œλ¬Έμ— 응닡 μ½”λ“œλŠ” 201 Created 둜 λͺ…ν™•ν•˜κ²Œ μž‘μ„±ν•΄μ•Ό ν•˜λ©°, κ΄€λ ¨ λ¦¬μ†ŒμŠ€λ₯Ό Clientκ°€ Location 헀더에 μž‘μ„±λœ URIλ₯Ό 톡해 확인할 수 μžˆλ„λ‘ ν•˜λ©΄ μ™„λ²½ν•˜κ²Œ REST μ„±μˆ™λ„ λͺ¨λΈμ˜ 2단계λ₯Ό μΆ©μ‘±ν•œ 것이라고 λ³Ό 수 μžˆλ‹€.



⭐ HTTP λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ μœ μ˜ν•΄μ•Όν•  λͺ‡κ°€μ§€ κ·œμΉ™

  • GET λ©”μ„œλ“œλŠ” μ„œλ²„μ˜ 데이터λ₯Ό λ³€ν™”μ‹œν‚€μ§€ μ•ŠλŠ” μš”μ²­μ— μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

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

  • PUT λ©”μ„œλ“œμ™€ PATCH λ©”μ„œλ“œλ„ κ΅¬λΆ„ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•˜λ©°, PUT은 ꡐ체, PATCHλŠ” μˆ˜μ •μ˜ μš©λ„λ‘œ μ‚¬μš©ν•œλ‹€.



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

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

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

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


μ•„λž˜μ— μ˜ˆμ‹œμ—μ„œλŠ” μ˜ˆμ•½ κ°€λŠ₯ μ‹œκ°„ 확인 ν›„, κ·Έ μ‹œκ°„λŒ€μ— μ˜ˆμ•½μ„ ν•  수 μžˆλŠ” 링크λ₯Ό μ‚½μž…ν•˜κ±°λ‚˜ μ˜ˆμ•½μ™„λ£Œ ν›„, μ˜ˆμ•½μ„ 확인할 수 μžˆλŠ” 링크λ₯Ό μ‚½μž…ν–ˆλ‹€.




OPEN API

κΈ€μž κ·ΈλŒ€λ‘œ λˆ„κ΅¬μ—κ²Œλ‚˜ μ—΄λ €μžˆλŠ” API둜, 각각 정해진 μ΄μš©μˆ˜μΉ™μ΄λ‚˜ μ œν•œμ‚¬ν•­μ΄ μžˆμ„ 수 μžˆλ‹€.

API Key

APIλ₯Ό μ΄μš©ν•˜κΈ° μœ„ν•΄μ„œ ν•„μš”ν•˜λ©°, μ„œλ²„μ˜ 문을 μ—¬λŠ” μ—΄μ‡ λ‘œ λ³Ό 수 μžˆλ‹€.

λ‘œκ·ΈμΈν•œ μ΄μš©μžμ—κ²Œ μžμ›μ— μ ‘κ·Όν•  수 μžˆλŠ” κΆŒν•œμ„ API Key의 ν˜•νƒœλ‘œ μ œκ³΅ν•˜κ³ , 데이터λ₯Ό μš”μ²­ν•  λ•Œ API Keyλ₯Ό 같이 μ „λ‹¬ν•΄μ•Όλ§Œ μ›ν•˜λŠ” 응닡을 받을 수 μžˆλ‹€.




Reference: μ½”λ“œμŠ€ν…Œμ΄μΈ 

0개의 λŒ“κΈ€