๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’๊ณต๋ถ€/ํฐ ๋ฐœ๊ฒฌ

REST API?

by rindev 2021. 10. 8.

๊ทธ๋ž˜ ์ด ์ค‘์š”ํ•œ๊ฑธ ์ •๋ฆฌ๋ฅผ ์•ˆํ•ด๋†จ์„๋ฆฌ๊ฐ€ ์—†๋Š”๋ฐ.......!^^!!!! ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•œ ์Šค์Šค๋กœ๊ฐ€ ๋ฐ‰๋‹ค.. ํ—ท๊ฐˆ๋ฆฌ๋ฉด ๋ญ๋‹ค? #๋‹ค์‹œ #๊ฐ€๋ณด์ž๊ณ  #๋ ˆ๊ณ 

 

 


๐Ÿค” REST?

โœ… REST(Representational State Transfer)

  • ์ž์›(์ด๋ฏธ์ง€, ๋™์˜์ƒ, DB....)์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธ
    • JSON์ด๋‚˜ XML์„ ํ†ตํ•ด ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 
  • URI๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•˜๊ณ  HTTP method(GET, POST, PUT, PATCH, DELETE)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD๋ฅผ ์ ์šฉ
  • ์›น์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ
  • ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹์ค‘ ํ•˜๋‚˜

 

๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด... ์›น์— ์กด์žฌํ•˜๋Š” ์ž์›์— ๋Œ€ํ•ด์„œ ๊ณ ์œ ํ•œ URI๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ์˜๋ฏธ

 

๐Ÿ‘ ๊ทธ๋ž˜์„œ RESTํ•œ ๋ชฉํ‘œ๋ฅผ ๊ฐ€์ง€๊ณ  ์ž‘์—…์„ ํ•˜๊ฒŒ๋˜๋ฉด ์–ป๋Š” ์žฅ์ 

  • ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ์˜ ์˜์—ญ์„ ํšจ์œจ์ ์œผ๋กœ ๋ถ„๋ฆฌ → ๊ทœ๋ชจ ํ™•์žฅ์— ์žฅ์ ์ด ์ƒ๊น€
  • ํ”„๋ก ํŠธ์™€ ๋ฐฑ์ด ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ๋˜์–ด ๋ฒ„์ „ ๊ด€๋ฆฌ์— ์šฉ์ด
  • ๋ฐฑ์—”๋“œ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด์„œ ์ž์›์„ ์บก์Šํ™” ํ•  ์ˆ˜ ์žˆ์Œ → ๋ณด์•ˆ ๊ฐ•ํ™”

๐Ÿ‘Ž ๋ฌผ๋ก  ๋‹จ์ ๋„ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค?!

  • ํ‘œ์ค€์ด ์—†์Œ
  • ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„์ง ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ๋“ค์ด ์กด์žฌ (PUT, DELETE ๋“ฑ..) 

 

โœ… REST์˜ ํŠน์ง•

  1. ์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ
  2. Stateless (๋ฌด์ƒํƒœ)
    • ํด๋ผ์ด์–ธํŠธ์˜ context๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•˜์ง€ ์•Š์Œ
      (์„ธ์…˜, ์ฟ ํ‚ค์™€ ๊ฐ™์€ context ์ •๋ณด๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋จ → ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•ด์ง)
    • ์„œ๋ฒ„๋Š” ๊ฐ๊ฐ์˜ ์š”์ฒญ์„ ์™„์ „ํžˆ! ๋ณ„๊ฐœ์˜ ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•จ
      • ๊ฐ API ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๋งŒ์„ ๋‹จ์ˆœ ์ฒ˜๋ฆฌํ•จ
      • ์ด์ „ ์š”์ฒญ์ด ๋‹ค์Œ ์š”์ฒญ์— ์˜ํ–ฅ์„ ์ฃผ๋ฉด ์•ˆ๋จ
      • ๋‹จ, ์ด์ „ ์š”์ฒญ์ด DB๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ, DB์— ์˜ํ•ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅ
      • ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ์ผ๊ด€์„ฑ์„ ๋ถ€์—ฌ
  3. Cacheable (์บ์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ)
    • ์›น ํ‘œ์ค€ HTTP protocol์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด ์ธํ”„๋ผ๋ฅผ ํ™œ์šฉ ๊ฐ€๋Šฅ
      • ์›น์ด ๊ฐ€์ง€๋Š” ๊ฐ•๋ ฅํ•œ ํŠน์ง•(์บ์‹ฑ)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
      • ๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์บ์‹œ๊ฐ€ ์š”๊ตฌ๋จ
      • ์บ์‹œ ์‚ฌ์šฉ์„ ํ†ตํ•ด ์‘๋‹ต ์‹œ๊ฐ„์ด ๋นจ๋ผ์ง€๊ณ , REST ์„œ๋ฒ„์˜ ํŠธ๋žœ์žญ์…˜์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‘๋‹ต์‹œ๊ฐ„, ์„ฑ๋Šฅ ๋“ฑ์ด ํ–ฅ์ƒ๋จ
  4. ๊ณ„์ธตํ˜• ๊ตฌ์กฐ
  5. Uniform Interface (์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ)
    • URI๋กœ ์ง€์ •ํ•œ ์ž์›์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ํ†ต์ผ๋˜๊ณ  ํ•œ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ˆ˜ํ–‰
    • HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ → ํŠน์ • ์–ธ์–ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š์Œ

 

๐Ÿค” REST API?

  • REST ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ
  • OpenAPI ๋“ฑ์„ ์ œ๊ณตํ•˜๋Š” ์—…์ฒด ๋Œ€๋ถ€๋ถ„์€ REST API๋ฅผ ์ œ๊ณตํ•จ
๐Ÿ’ก API(Application Programming Interface)
์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ์ด‰์ง„ํ•˜๋ฉฐ, ์„œ๋กœ ์ •๋ณด๋ฅผ ๊ตํ™˜ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ

 

โœ… REST API์˜ ๊ตฌ์„ฑ ์š”์†Œ

1. ์ž์› (Resource) : URI

  • ๋ชจ๋“  ์ž์›์— ๊ณ ์œ  ์•„์ด๋””๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ž์›์€ ์„œ๋ฒ„์— ์กด์žฌํ•จ
  • ์ž์›์„ ๊ตฌ๋ณ„ํ•˜๋Š” ์•„์ด๋””๋Š” HTTP URI์ž„ (ex : groups/:group_id) 
  • ํด๋ผ์ด์–ธํŠธ๋Š” URI๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž์›์„ ์ง€์ •ํ•˜๊ณ  ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ์„œ๋ฒ„์— ์š”์ฒญ

2. ํ–‰์œ„(Verb) : HTTP Method

  • HTTP protocol์˜ method๋ฅผ ์‚ฌ์šฉํ•จ
  • GET, POST, PUT, DELETE์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณต
    • GET : ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•˜๊ณ , ํ•ด๋‹น ๋„ํ๋จผํŠธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ด
    • POST : POST๋ฅผ ํ†ตํ•ด ํ•ด๋‹น uri๋ฅผ ์š”์ฒญํ•˜๋ฉด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•จ
    • PUT, PATCH : ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ • (PUT → ์ „์ฒด ์ˆ˜์ •, PATCH → ์ผ๋ถ€๋ถ„ ์ˆ˜์ •)
    • DELETE : ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œ

3. ํ‘œํ˜„(Representation of Resource)

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ณด๋ƒ„
  • ์ž์›์€ JSON, XML, Text ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ํ‘œํ˜„์œผ๋กœ ๋‚˜ํƒ€๋‚ด์งˆ ์ˆ˜ ์žˆ์Œ (๋ณดํ†ต์€ JSON, XML ์‚ฌ์šฉ)

→ ์š”์•ฝ : URI๋กœ ์ฃผ์–ด๋‚˜ ๋ชฉ์ ์–ด๋ฅผ ๋งŒ๋“ค๊ณ , HTTP Method๋กœ ๋™์‚ฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐœ๋…

 

 

 

๐Ÿ‘€์ฐธ๊ณ  (๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค)

๋”๋ณด๊ธฐ

 

๋Œ“๊ธ€