RestFul API

RestFul API ๊ฐœ๋… ์„ค๋ช…

567Rabbit 2024. 5. 20. 15:06

API๋ž€?

 

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

์‰ฝ๊ฒŒ ๋งํ•ด, API๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์„œ๋กœ ๋„์™€์ฃผ๊ณ , ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋งค๊ฐœ์ฒด์ด๋‹ค.

 

 

 


Windows API๋ž€?

 

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

 

 

 

 

 

RestFul API๋ž€?

 

- Rest๋Š” "Representational State Transfer" ์˜ ์•ฝ์ž๋กœ, ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” API์ด๋‹ค. 

- ์„œ๋ฒ„๋‚˜ ์„œ๋น„์Šค์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ž์›(์ด๋ฏธ์ง€,๋™์˜์ƒ,DB์ž์›)์— ๊ณ ์œ ํ•œ URL(URI)์„ ๋ถ€์—ฌํ•ด ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

- ์ž์›์„ ์ •์˜ํ•˜๊ณ  ์ž์›์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ์˜๋ฏธํ•œ๋‹ค.

- ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ์›น์„ ํ†ตํ•ด ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

 

 

 

REST์˜ ๊ตฌ์„ฑ

  1. ์ž์›(Resource): ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด. ex) "์‚ฌ์šฉ์ž(User)"๋ผ๋Š” ์ž์›, URL์ด๋ผ๋Š” ์ž์›
  2. ํ–‰์œ„(Method) ๋˜๋Š” HTTP Method : ์ž์›์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    • GET: ์ž์›์„ ์กฐํšŒ
    • POST: ์ƒˆ๋กœ์šด ์ž์›์„ ์ƒ์„ฑ
    • PUT: ๊ธฐ์กด ์ž์›์„ ์—…๋ฐ์ดํŠธ
    • DELETE: ์ž์›์„ ์‚ญ์ œ
  3. ํ‘œํ˜„(Message): JSON, XML ๋“ฑ์˜ ํ˜•ํƒœ๋ฅผ ์ด์šฉํ•ด ํ‘œํ˜„

 

 

 

 

 URL(URI) ๊ตฌ์„ฑ ๋ช…์นญ

 

 

 

 

 

 

Message Format

 

 

 

** ๋ฌด์กฐ๊ฑด ์ˆœ์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ(Request)์„ ๋จผ์ €, ๊ทธ ๋‹ค์Œ์œผ๋กœ Response๊ฐ€ ํด๋ผ์ด์–ธํŠธ์— ๋Œ์•„์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

Response๋กœ ๋ฐ›์•„์˜ฌ ๋•Œ HTTP Status Codes

 

 

 

  • 200 OK: ์š”์ฒญ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • 201 Created: ์š”์ฒญ์ด ์„ฑ๊ณต์ ์ด์—ˆ์œผ๋ฉฐ, ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • 204 No Content: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ์ง€๋งŒ ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 400 Bad Request: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์˜ ๊ตฌ๋ฌธ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
  • 401 Unauthorized: ์š”์ฒญ์ด ์ธ์ฆ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • 403 Forbidden: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ดํ•ดํ–ˆ์ง€๋งŒ ๊ฑฐ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • 404 Not Found: ์„œ๋ฒ„๊ฐ€ ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

 

 

 

Message ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ JSON ๋ฌธ๋ฒ•