๐Ÿ“ŒLanguage/JavaScript

[Deep Dive] REST API๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

hellohailie 2022. 12. 16. 23:09

โœ”๏ธ ์ด๋ฒˆ ์ •๋…์„ ํ†ตํ•ด ์•Œ๊ฒŒ ๋œ ๊ฒƒ
REST API๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

 

<๋‹ต ๋ฏธ๋ฆฌ๋ณด๊ธฐ>

๐Ÿค” REST API๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๐Ÿค“ REST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ REST๋Š” HTTP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ๊ทœ์ •ํ•œ ์•„ํ‚คํ…์ณ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

 


โœ”๏ธ REST์˜ ์˜๋ฏธ

(REpresentational State Transfer)

REST = HTTP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ๊ทœ์ •ํ•œ ์•„ํ‚คํ…์ณ์ด๋‹ค. 

RESTfull = REST์˜ ๊ธฐ๋ณธ ์›์น™์„ ์„ฑ์‹คํžˆ ์ง€ํ‚จ ์„œ๋น„์Šค ๋””์ž์ธ์„ 'RESTfull'์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. 

REST API = REST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

 


โœ”๏ธ REST API์˜ ๊ตฌ์„ฑ

์ž์› resource, ํ–‰์œ„ verb, ํ‘œํ˜„ representations

 

REST API๋งŒ์œผ๋กœ HTTP ์š”์ฒญ ๋‚ด์šฉ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. 

๊ตฌ์„ฑ์š”์†Œ ๋‚ด์šฉ ํ‘œํ˜„๋ฐฉ๋ฒ•
์ž์› resource ์ž์› URI(์—”๋“œํฌ์ธํŠธ)
ํ–‰์œ„ verb ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„ HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ
ํ‘œํ˜„ representations ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„์˜ ๊ตฌ์ฒด์  ๋‚ด์šฉ ํŽ˜์ด๋กœ๋“œ

 


โœ”๏ธ REST API ์„ค๊ณ„ ์›์น™

1. URI๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค. 

๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์€ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ž!

#bad
GET /getTodos/1
GET /todos/show/1

#good
GET /todos/1

 

2. ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

 

HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์š”์ฒญ์˜ ์ข…๋ฅ˜์™€ ๋ชฉ์ ์„ ์•Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. 

HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ ๋ชฉ์  ํŽ˜์ด๋กœ๋“œ
GET ๋ชจ๋“ /ํŠน์ • ๋ฆฌ์†Œ์Šค ์ทจ๋“ X
POST ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ O
PUT ๋ฆฌ์†Œ์Šค์˜ ์ „์ฒด ๊ต์ฒด O
PATCH ๋ฆฌ์†Œ์Šค์˜ ์ผ๋ถ€ ์ˆ˜์ • O
DELETE ๋ชจ๋“ /ํŠน์ • ๋ฆฌ์†Œ์Šค ์‚ญ์ œ X

 

 

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive๋ฅผ ์ •๋…ํ•˜๊ณ  ์ œ๊ฐ€ ์ดํ•ดํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค ๐Ÿ‘ฉ‍๐Ÿ’ป