์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ ๊ฐœ์ธ ๊ณต๋ถ€ ๊ณผ์ •์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

RESTful API

RESTful API?? RESTful URL?? ๋งŽ์ด ๋“ค์–ด๋Š” ๋ดค๋Š”๋ฐ,, ์ •ํ™•ํ•˜๊ฒŒ ๋ชจ๋ฅด๊ฒ ๋‹ค.๐Ÿฅฒ
ํ˜„์žฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” API ์„ค๊ณ„ ๊ทœ์น™ ๊ฐ€์šด๋ฐ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ทœ์น™์ด๋ผ๊ณ  ํ•˜๋‹ˆ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌํ•ด๋ณด์ž!

REST?

REST(REpresentational State Transfer)๋ž€ ์›น์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ž์›(resorce, ex. ์ด๋ฏธ์ง€, ๋™์˜์ƒ, ๋ฐ์ดํ„ฐ)์— ๊ณ ์œ ํ•œ URI๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์ž์›์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก , ๋˜๋Š” ๊ทœ์น™
> RESTful API๋Š” REST ํŠน์ง•์„ ์ง€ํ‚ค๋ฉด์„œ API๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.



RESTful API๋ž€?

  • REST ํŠน์ง•์„ ์ง€ํ‚ค๋ฉด์„œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ์— ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์— ๋„๋ฆฌ ์“ฐ์ด๋Š” ์ผ์ข…์˜ ํ˜•์‹.
    • REST: ์›น์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ž์›์— ๊ณ ์œ ํ•œ uri์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•
      • URI: ์ž์›์„ ๊ตฌ์กฐ์™€ ํ•จ๊ป˜ ๋‚˜ํƒ€๋‚ด๋Š” ํ˜•์‹์˜ ๊ตฌ๋ถ„์ž
    • API: ์–ด๋–ค ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋ถ€ํ„ฐ ์ง€์ •๋œ ํ˜•์‹์œผ๋กœ ์š”์ฒญ, ๋ช…๋ น์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ ex. Web API, windows API ๋“ฑ


์กฐ๊ธˆ ๋” ํ’€์–ด๋ณด๋ฉด, โ€œํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ฐฑ์—”๋“œ API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ url์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ธ๊ฐ€?โ€ ์ •๋„๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.



REST API์˜ ํŠน์ง•

  • ๊ฐ ์š”์ฒญ์ด ์–ด๋–ค ๋™์ž‘์ด๋‚˜ ์ •๋ณด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ทธ ์š”์ฒญ์˜ ๋ชจ์Šต ์ž์ฒด๋กœ ์ถ”๋ก  ๊ฐ€๋Šฅํ•˜๋‹ค
  • ์„œ๋ฒ„๋กœ REST API ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋Š” HTTP ๊ทœ์•ฝ์— ๋”ฐ๋ผ ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•˜๋Š”๋ฐ, REST API๋Š” GET, POST, DELETE, PUT, PATCH ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
    • POST <span style=โ€œcolor:blueโ€>C</span>reate
    • GET <span style=โ€œcolor:blueโ€>R</span>ead
    • PUT <span style=โ€œcolor:blueโ€>U</span>pdate ์ •๋ณด๋ฅผ ํ†ต์งธ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ
    • PATCH <span style=โ€œcolor:blueโ€>U</span>pdate ์ผ๋ถ€ ์ •๋ณด๋งŒ ๋ณ€๊ฒฝํ•  ๋•Œ
    • DELETE <span style=โ€œcolor:blueโ€>D</span>elete



REST API์˜ ์žฅ์ 

  • ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • Open API ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์‰ฝ๋‹ค
  • ๊ธฐ์กด ์›น ์ธํ”„๋ผ(HTTP)๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.



REST API์˜ ๋‹จ์ 

  • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ 4 ๊ฐ€์ง€ ๋ฐ–์— ์—†๋‹ค.
  • HTTP ํ†ต์‹  ๋ชจ๋ธ์— ๋Œ€ํ•ด์„œ๋งŒ ์ง€์›ํ•œ๋‹ค.




โœจ tl;dr

โœ”๏ธ REST API๋ž€?

  • ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ์— ์žˆ์–ด์„œ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์— ๋„๋ฆฌ ์“ฐ์ด๋Š” ์ผ์ข…์˜ ํ˜•์‹
  • ๊ฐ ์š”์ฒญ์ด ์–ด๋–ค ๋™์ž‘์ด๋‚˜ ์ •๋ณด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ทธ ์š”์ฒญ์˜ ๋ชจ์Šต ์ž์ฒด๋กœ ์ถ”๋ก  ๊ฐ€๋Šฅํ•˜๋‹ค

โœ”๏ธ RESTful ํ•˜๊ฒŒ API๋ฅผ ๋””์ž์ธ ํ•œ๋‹ค๋Š” ๊ฒƒ์€?

  • ๋ฆฌ์†Œ์Šค์™€ ํ–‰์œ„๋ฅผ ๋ช…์‹œ์ ์ด๊ณ  ์ง๊ด€์ ์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.
    • ๋ฆฌ์†Œ์Šค๋Š” URI๋กœ ํ‘œํ˜„๋˜๋Š”๋ฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์€ ๋ช…์‚ฌ๋กœ ํ‘œํ˜„๋˜์–ด์•ผ ํ•œ๋‹ค.
    • ํ–‰์œ„๋Š” HTTP Method๋กœ ํ‘œํ˜„ํ•˜๊ณ , GET(์กฐํšŒ), POST(์ƒ์„ฑ), PUT(๊ธฐ์กด entity ์ „์ฒด ์ˆ˜์ •), PATCH(๊ธฐ์กด entity ์ผ๋ถ€ ์ˆ˜์ •), DELETE(์‚ญ์ œ)์„ ๋ถ„๋ช…ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • Message๋Š” Header์™€ Body๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
    • Entity์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ body์— ๋‹ด๋Š”๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ํ–‰๋™ํ•  ํŒ๋‹จ์˜ ๊ทผ๊ฑฐ๊ฐ€ ๋˜๋Š” ์ปจํŠธ๋กค ์ •๋ณด์ธ API ๋ฒ„์ „ ์ •๋ณด, ์‘๋‹ต๋ฐ›๊ณ ์ž ํ•˜๋Š” MIME ํƒ€์ž… ๋“ฑ์€ header ์— ๋‹ด๋Š”๋‹ค.
    • header์™€ body๋Š” http header ์™€ http body ๋กœ ๋‚˜๋ˆŒ ์ˆ˜๋„ ์žˆ๊ณ , http body ์— ๋“ค์–ด๊ฐ€๋Š” json ๊ตฌ์กฐ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ™์€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์„œ ์š”์ฒญํ•˜๋„๋ก ํ•œ๋‹ค.
    • ๋ธŒ๋ผ์šฐ์ €๋Š” form-data ํ˜•์‹์˜ submit ์œผ๋กœ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„์—์„œ๋Š” json ํ˜•ํƒœ๋กœ ๋ณด๋‚ด๋Š” ์‹์˜ ๋ถ„๋ฆฌ๋ณด๋‹ค๋Š” json ์œผ๋กœ ๋ณด๋‚ด๋“ , ๋‘˜ ๋‹ค form-data ํ˜•์‹์œผ๋กœ ๋ณด๋‚ด๋“  ํ•˜๋‚˜๋กœ ํ†ต์ผํ•œ๋‹ค.