[๋„คํŠธ์›Œํฌ] REST API

windowookยท2024๋…„ 1์›” 16์ผ
post-thumbnail

๐ŸŒฑ API

API๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

Application Programing Interface๋Š” ์ฝ”๋“œ๋ผ๋ฆฌ ์„œ๋กœ ์†Œํ†ตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋น„์œ ๋ฅผ ํ•˜์ž๋ฉด, ์„œ๋ฒ„์—์„œ ๋งŒ๋“  ํ‚ค๋ณด๋“œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŠน์ • ํ‚ค๊ฐ€ ํŒ”๋กœ์šฐ, ๋กœ๊ทธ์ธ, ์ข‹์•„์š”์˜ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค๊ณ  ์น˜๋ฉด ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋ฐฑ์—”๋“œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์–ด๋–ค ์‚ฌ์ดํŠธ์—์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ๊ฒฝ์šฐ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ •๋ณด๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณต ๋ฐ›์„ ์ˆ˜ ์žˆ์„ ์ง€์— ๋Œ€ํ•œ ๊ทœ๊ฒฉ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

API๋Š” ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์šฉ๋„์— ๋”ฐ๋ผ, ์˜คํ”ˆ API์™€ ๋น„๊ณต๊ฐœ API ์ •๋ณด๋กœ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
์˜คํ”ˆ API๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜์—ฌ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ทœ๊ฒฉ์ด๋ฉฐ,
๋น„๊ณต๊ฐœ API๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ๋งŒ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ทœ๊ฒฉ์ž…๋‹ˆ๋‹ค.

๐ŸŒฑ REST API

์›น์„ ๊ฐœ๋ฐœํ•  ๋•Œ API๋ฅผ ๋งŒ๋“ค๋ฉด REST ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
REST๋ž€ Representational State Transfer์˜ ์•ฝ์ž๋กœ, ์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

HTTP URI(Uniform Resource Identifier)๋ฅผ ํ†ตํ•ด ์ž์›(Resource)์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method(POST, GET, PUT, DELETE, PATCH ๋“ฑ)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›(URI)์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ CRUD๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ปดํ“จํ„ฐ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๊ฐ€์ง€๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์ธ Create, Read, Update, Delete๋ฅผ ๋ฌถ์–ด์„œ ์ผ์ปซ๋Š” ๋ง๋กœ REST์—์„œ์˜ CRUD Operation ๋™์ž‘ ์˜ˆ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ ํ˜•๊ธฐ๋Šฅ
Create๋ฐ์ดํ„ฐ ์ƒ์„ฑ, POST
Read๋ฐ์ดํ„ฐ ์กฐํšŒ, GET
Update๋ฐ์ดํ„ฐ ์ˆ˜์ •, PUT, PATCH
Delete๋ฐ์ดํ„ฐ ์‚ญ์ œ, DELETE

REST์˜ 3๊ฐ€์ง€ ๊ตฌ์„ฑ์š”์†Œ

๊ตฌ์„ฑ ์š”์†Œ๋งค๊ฐœ์ฒด
์ž์›(Resource)HTTP URI
์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„(Verb)HTTP Method
์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„์˜ ๋‚ด์šฉ(Representations)HTTP Message Pay Load

REST์˜ ํŠน์ง•

  • Server โ†” Client
  • Stateless ๋ฌด์ƒํƒœ
  • Cacheable ์บ์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • Layered System ๊ณ„์ธตํ™”
  • Uniform Interface ์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ

์žฅ์ 

HTTP ํ”„๋กœํ† ์ฝœ์˜ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ REST API ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋ณ„๋„์˜ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  HTTP ํ”„๋กœํ† ์ฝœ์˜ ํ‘œ์ค€์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ถ”๊ฐ€์ ์ธ ์žฅ์ ์„ ํ•จ๊ป˜ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
๋˜, Hypermedia API์˜ ๊ธฐ๋ณธ์„ ์ถฉ์‹คํžˆ ์ง€ํ‚ค๋ฉด์„œ ๋ฒ”์šฉ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

REST API๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ, ์˜๋„ํ•˜๋Š” ๋ฐ”๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„œ๋น„์Šค ๋””์ž์ธ์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ์ ์œผ๋กœ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ 

REST API๋Š” ํ‘œ์ค€ ์ž์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ์ •์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  HTTP Method ํ˜•ํƒœ๊ฐ€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.
๋˜ํ•œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ํ…Œ์Šค ํŠธํ•  ์ผ์ด ๋งŽ์€ ์„œ๋น„์Šค๋ผ๋ฉด ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” URL๋ง๊ณ  Header ์ •๋ณด์˜ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋ฏ€๋กœ ์ „๋ฌธ์„ฑ์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š์•„ ์ง€์›ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋™์ž‘๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

REST API๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋ฒ•

  • URI๋Š” ๋™์‚ฌ๋ณด๋‹ค๋Š” ๋ช…์‚ฌ๋ฅผ, ๋Œ€๋ฌธ์ž๋ณด๋‹ค๋Š” ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ง€๋ง‰์— /๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • _๋Œ€์‹  -์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํŒŒ์ผ ํ™•์žฅ์ž๋Š” URI์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ํ–‰์œ„๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
profile
์•ˆ๋…•ํ•˜์„ธ์š”

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