๐Ÿ“REST API๋ž€?

์ดํ˜ธ์„ฑยท2021๋…„ 2์›” 10์ผ
0

๐Ÿ“REST API ์ •๋ฆฌ


๋ชฉ์ฐจ

- REST API์— ๋Œ€ํ•˜์—ฌ ์ •๋ฆฌ


REST API์— ๋Œ€ํ•˜์—ฌ ์ •๋ฆฌ (4๊ฐ€์ง€ ๋ฐฉ์‹)

๊ฐœ์š”

  • REST(REpresentation State Transfer) ๋Š” ์›น์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งํ•œ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์€ REST์™€ URL์„ ํ†ตํ•ด ์ •์˜, ๊ทธ๋ž˜์„œ ๋งค์šฐ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค. ์ด๋Š” ๋Œ€์ค‘์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์ข€ ๋” ์‰ฝ๊ฒŒ ๋‹ค๊ฐ€๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์š”์†Œ์ด๊ธฐ๋„ ํ•˜๋‹ค.

REST ๊ฐœ๋…

  • HTTP URI๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method(POST, GET, PUT ,DELETE)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • REST๋Š” ์ž์› ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐ(ROA, Resource Oriented Architecture) ์„ค๊ณ„์˜ ์ค‘์‹ฌ์— Resource๊ฐ€ ์žˆ๊ณ  HTTP Method๋ฅผ ํ†ตํ•ด Resource๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ์•„ํ‚คํ…์ณ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์›น ์‚ฌ์ดํŠธ์˜ ์ด๋ฏธ์ง€, ํ…์ŠคํŠธ, DB ๋‚ด์šฉ ๋“ฑ์˜ ๋ชจ๋“  ์ž์›์— ๊ณ ์œ ํ•œ ID์ธ HTTP URI๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค.

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์›น์—์„œ REST API๋ฅผ ์ž‘์„ฑํ•  ๋•Œ HTTP Methods๋ฅผ ์ด์šฉํ•˜์—ฌ CRUD๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.
๋ฐฉ์‹(Method)์˜๋ฏธ์—ญํ• 
POSTCreatePOST๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ
GETSelectGET์„ ํ†ตํ•ด ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒ
PUTUpdatePUT์„ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •
DELETEDeleteDELETE๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ
PATCHUpdate๋ฆฌ์†Œ์Šค ์ผ๋ถ€ ์ˆ˜์ •

REST ๊ตฌ์„ฑ

  • ์ž์›(Resource) - URI

  • ํ–‰์œ„ (Verb) - HTTP Method

  • ํ‘œํ˜„ (Representations)


REST์˜ ํŠน์ง•

  • Uniform (์œ ๋‹ˆํผ ์ธํ„ฐํŽ˜์ด์Šค)

HTTP ํ‘œ์ค€์—๋งŒ ๋”ฐ๋ฅธ๋‹ค๋ฉด, ์•ˆ๋“œ๋กœ์ด๋“œ/IOS ํ”Œ๋žซํผ์ด๋“ , ํŠน์ • ์–ธ์–ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ํ”Œ๋žซํผ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, URI๋กœ ์ง€์ •ํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ์˜๋ฏธํ•œ๋‹ค.

  • Stateless (๋ฌด์ƒํƒœ์„ฑ)

REST๋Š” ๋ฌด์ƒํƒœ์„ฑ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง„๋‹ค. ๋‹ค์‹œ ๋งํ•ด ์ž‘์—…์„ ์œ„ํ•œ ์ƒํƒœ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์„ธ์…˜ ์ •๋ณด๋‚˜ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ๋ณ„๋„๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— API ์„œ๋ฒ„๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๋งŒ์„ ๋‹จ์ˆœํžˆ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์„œ๋น„์Šค์˜ ์ž์œ ๋„๊ฐ€ ๋†’์•„์ง€๊ณ  ์„œ๋ฒ„์—์„œ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•ด์ง„๋‹ค.

  • Cacheable (์บ์‹œ ๊ฐ€๋Šฅ)

REST์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” HTTP๋ผ๋Š” ๊ธฐ์กด ์›น ํ‘œ์ค€์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ HTTP๊ฐ€ ๊ฐ€์ง„ ์บ์‹ฑ ๊ธฐ๋Šฅ์ด ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. HTTP ํ”„๋กœํ† ์ฝœ ํ‘œ์ค€์—์„œ ์‚ฌ์šฉํ•˜๋Š” Last-Modified ํƒœ๊ทธ๋‚˜ E-Tag๋ฅผ ์ด์šฉํ•˜๋ฉด ์บ์‹ฑ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • Self-descriptiveness (์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ)

REST์˜ ๋˜ ๋‹ค๋ฅธ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” REST API ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ๋„ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

  • Client - Server ๊ตฌ์กฐ

REST ์„œ๋ฒ„๋Š” API ์ œ๊ณต, ํด๋ผ์ด์–ธํŠธ ์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋‚˜ ์ปจํ…์ŠคํŠธ(์„ธ์…˜, ๋กœ๊ทธ์ธ ์ •๋ณด) ๋“ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ฐ๊ฐ์˜ ์—ญํ• ์ด ํ™•์‹คํžˆ ๊ตฌ๋ถ„๋˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์—์„œ ๊ฐœ๋ฐœํ•ด์•ผ ํ•  ๋‚ด์šฉ์ด ๋ช…ํ™•ํ•ด์ง€๊ณ  ์„œ๋กœ ๊ฐ„ ์˜์กด์„ฑ์ด ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

  • ๊ณ„์ธตํ˜• ๊ตฌ์กฐ

REST ์„œ๋ฒ„๋Š” ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ณด์•ˆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์•”ํ˜ธํ™” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•ด ๊ตฌ์กฐ์ƒ์˜ ์œ ์—ฐ์„ฑ์„ ๋‘˜ ์ˆ˜ ์žˆ๊ณ  PROXY, ๊ฒŒ์ดํŠธ์›จ์ด ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์ค‘๊ฐ„๋งค์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.


REST์˜ ์žฅ๋‹จ์ 

-์žฅ์ 

  • HTTP ํ”„๋กœํ† ์ฝœ์˜ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ REST API ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋ณ„๋„์˜ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

  • HTTP ํ”„๋กœํ† ์ฝœ์˜ ํ‘œ์ค€์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ถ”๊ฐ€์ ์ธ ์žฅ์ ์„ ํ•จ๊ป˜ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

  • HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • Hypermedia API์˜ ๊ธฐ๋ณธ์„ ์ถฉ์‹คํžˆ ์ง€ํ‚ค๋ฉด์„œ ๋ฒ”์šฉ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

  • REST API ๋ฉ”์‹œ์ง€๊ฐ€ ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„œ๋น„์Šค ๋””์ž์ธ์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™”ํ•œ๋‹ค.

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•œ๋‹ค.

-๋‹จ์ 

  • ํ‘œ์ค€์˜ ์ž์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

  • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ 4๊ฐ€์ง€๋ฐ–์— ์—†๋‹ค.

  • HTTP Method ํ˜•ํƒœ๊ฐ€ ์ œํ•œ์ ์ด๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธํ•  ์ผ์ด ๋งŽ์€ ์„œ๋น„์Šค๋ผ๋ฉด ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” URL๋ณด๋‹ค Header ์ •๋ณด์˜ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ „๋ฌธ์„ฑ์ด ์š”๊ตฌ๋œ๋‹ค.

  • ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š์•„ ์ง€์›ํ•ด์ฃผ์ง€ ๋ชปํ•˜๋Š” ๋™์ž‘์ด ๋งŽ๋‹ค.(์ต์Šคํ”Œ๋กœ๋Ÿฌ)


RESTful API์˜ URL ์„ค๊ณ„๊ทœ์น™

  • ์†Œ๋ฌธ์ž ์‚ฌ์šฉ(์ตœ์†Œํ•œ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„)

  • ํ•˜์ดํ”ˆ(-, hypen) ์‚ฌ์šฉ : ๊ณต๋ฐฑ ์ œ๊ฑฐ

  • ํ™•์žฅ์ž ์‚ฌ์šฉ ์ง€์–‘ : ํ—ค๋”์— ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.

  • CRUD๋Š” URI์— ์‚ฌ์šฉํ•ด์„  ์•ˆ ๋œ๋‹ค.


์šฉ์–ด์ •๋ฆฌ

  • Collection : ๋ณต์ˆ˜์˜ ์ •๋ณด ๋ฆฌ์†Œ์Šค

  • Document : ๋‹จ์ˆ˜์˜ ์—˜๋ฆฌ๋จผํŠธ ๋ฆฌ์†Œ์Šค

profile
ํ˜ธ์‹ฑ

0๊ฐœ์˜ ๋Œ“๊ธ€