1. REST API

1. REST API๋ž€?

์›น์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ์ž์›์„ HTTP URI๋กœ ํ‘œํ˜„ํ•˜๊ณ , HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹

2. REST API ๋””์ž์ธ ๋ฐฉ๋ฒ•: ๋ฆฌ์ฐจ๋“œ์Šจ์˜ REST ์„ฑ์ˆ™๋„ ๋ชจ๋ธ

  • 0๋‹จ๊ณ„: HTTP ์‚ฌ์šฉ

  • 1๋‹จ๊ณ„: ๊ฐœ๋ณ„ ๋ฆฌ์†Œ์Šค์™€์˜ ํ†ต์‹  ์ค€์ˆ˜

  • 2๋‹จ๊ณ„: HTTP ๋ฉ”์†Œ๋“œ ์›์น™ ์ค€์ˆ˜ (๊นŒ์ง€๋งŒ ์ง€์ผœ๋„ ์ข‹์€ API ๋””์ž์ธ์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Œ)

  • 3๋‹จ๊ณ„: HATEOAS ์›์น™ ์ค€์ˆ˜

3. REST API ์„ฑ์ˆ™๋„ ๋ชจ๋ธ - 0๋‹จ๊ณ„

restApi_0
  • ๋‹จ์ˆœํžˆ HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•ด๋„ ๋˜์ง€๋งŒ, ์ด ๊ฒฝ์šฐ ํ•ด๋‹น API๋ฅผ REST API๋ผ๊ณ ๋Š” ํ•  ์ˆ˜ ์—†์Œ

  • REST API๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๋‹จ๊ณ„์ผ๋ฟ

4. REST API ์„ฑ์ˆ™๋„ ๋ชจ๋ธ - 1๋‹จ๊ณ„

restApi_1
restApi_1r
  • ๊ฐœ๋ณ„ ๋ฆฌ์†Œ์Šค์™€์˜ ํ†ต์‹  ์ค€์ˆ˜ ์ฆ‰, ๋ชจ๋“  ์ž์›์€ ๊ฐœ๋ณ„ ๋ฆฌ์†Œ์Šค์— ๋งž๋Š” Endpoint๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

  • ์š”์ฒญํ•˜๊ณ  ๋ฐ›๋Š” ์ž์›์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์‘๋‹ต์œผ๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•จ

  • ์—”๋“œํฌ์ธํŠธ ์ž‘์„ฑ์‹œ์—๋Š” ๋™์‚ฌ, HTTP ๋ฉ”์†Œ๋“œ, ํ˜น์€ ์–ด๋–ค ํ–‰์œ„์— ๋Œ€ํ•œ ๋‹จ์–ด ์‚ฌ์šฉ์€ ์ง€์–‘ํ•˜๊ณ  ๋ฆฌ์†Œ์Šค์— ์ง‘์ค‘ํ•ด ๋ช…์‚ฌ ํ˜•ํƒœ์˜ ๋‹จ์–ด๋กœ ์ž‘์„ฑํ•  ๊ฒƒ (ex. appointment)

  • ๋ฆฌ์†Œ์Šค ์ „๋‹ฌ ์‹œ, ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์„ฑ๊ณต/์‹คํŒจ ์—ฌ๋ถ€๋„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ (ex. appointmentFailure)

5. REST API ์„ฑ์ˆ™๋„ ๋ชจ๋ธ - 2๋‹จ๊ณ„

restApi_2
  • CRUD์— ๋งž๊ฒŒ ์ ์ ˆํ•œ HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ์ค‘์ ์„ ๋‘ 

  • ์˜ˆ๋ฅผ ๋“ค์–ด ์กฐํšŒ(READ)๋ฅผ ์œ„ํ•ด์„œ๋Š” GET๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋•Œ GET ๋ฉ”์†Œ๋“œ๋Š” body๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๊ธฐ์— query parameter๋ฅผ ์‚ฌ์šฉํ•ด ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ „๋‹ฌ

  • ํ˜น์€ ์ƒ์„ฑ(CREATE)์„ ์œ„ํ•ด์„œ๋Š” POST๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‘๋‹ต์€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด๋‚ด์ฃผ๊ธฐ์— ์‘๋‹ต์ฝ”๋“œ๋Š” 201 Created๋กœ ๋ช…ํ™•ํžˆ ์ž‘์„ฑํ•˜์—ฌ ๊ด€๋ จ ๋ฆฌ์†Œ์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ Location ํ—ค๋”์— ์ž‘์„ฑ๋œ URI๋ฅผ ํ†ตํ•ด ํ™•์ธํ•˜๊ฒŒ๋” ํ•˜๋ฉด ๋จ

6. HTTP ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ์‹œ ๊ทœ์น™

  • GET: ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค์ง€ ์•Š๋Š” ์š”์ฒญ์— ์‚ฌ์šฉ

  • POST: ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค ์ƒ์„ฑํ•˜๊ณ , PUT ๋ฉ”์†Œ๋“œ๋Š” ์š”์ฒญ๋งˆ๋‹ค ๊ฐ™์€ ๋ฆฌ์†Œ์Šค ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์ด๋ฅผ *๋ฉฑ๋“ฑ(idmpotent) ํ•˜๋‹ค๊ณ  ํ•จ.*๋™์ผํ•œ ์š”์ฒญ์„ ํ•œ ๋ฒˆ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ์—ฌ๋Ÿฌ ๋ฒˆ ์—ฐ์†์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์ง€๋‹ˆ๊ณ , ์„œ๋ฒ„์˜ ์ƒํƒœ๋„ ๋™์ผํ•˜๊ฒŒ ๋‚จ์„ ๋•Œ, ํ•ด๋‹น HTTP ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์กŒ๋‹ค๊ณ  ๋งํ•จ. (์ถœ์ฒ˜: mdn)

  • PUT: ๊ต์ฒด๊ณผ PATCH: ์ˆ˜์ • ๋ฉ”์†Œ๋“œ๋„ ๊ตฌ๋ถ„ ํ•„์š”.

7. REST API ์„ฑ์ˆ™๋„ ๋ชจ๋ธ - 3๋‹จ๊ณ„

restApi_3
  • HATEOAS(Hypermedia As The Engine Of Application State)๋Š” ํ•˜์ดํผ๋ฏธ๋””์–ด ์ปจํŠธ๋กค์„ ์ ์šฉํ•จ.

  • ์‘๋‹ต์— ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ํฌํ•จํ•œ ๋งํฌ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ฉฐ, ๋งํฌ ์š”์†Œ๋Š” ์‘๋‹ต์„ ๋ฐ›์€ ๋’ค ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์•ก์…˜๋“ค์„ ์œ„ํ•ด ๋งŽ์€ ํ•˜์ดํผ๋ฏธ๋””์–ด ์ปจํŠธ๋กค์„ ํฌํ•จ

  • ์ฆ‰, ์‘๋‹ต ๋‚ด์— ์ƒˆ๋กœ์šด ๋งํฌ๋ฅผ ๋„ฃ์–ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํฌ์ธํŠธ.

8. Open API์™€ API Key

Open API

๊ณต๊ณต๋ฐ์ดํ„ฐ๋Š” ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋‚˜, ์ •ํ•ด์ง„ ์ˆ˜์น™์— ๋”ฐ๋ผ ์‚ฌ์šฉ

API Key

์„œ๋ฒ„์˜ ๋ฌธ์„ ์—ฌ๋Š” ์—ด์‡ ์ด๋ฉฐ, ๋กœ๊ทธ์ธํ•œ ์ด์šฉ์ž์—๊ฒŒ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ API Key ํ˜•ํƒœ๋กœ ์ œ๊ณต, ๋ฐ์ดํ„ฐ ์š”์ฒญ ์‹œ API Key๋ฅผ ๊ฐ™์ด ์ „๋‹ฌํ•ด์•ผ ์›ํ•˜๋Š” ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

9. Message State ์š”์ฒญ

root-endpoing(ํ˜น์€ root-URL)

  • API๋กœ ์š”์ฒญ์„ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ๋•Œ, ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๋Š” ์‹œ์ž‘์ 

  • ์ผ๋ฐ˜์ ์œผ๋กœ root-endpoint๋Š” ๋„๋ฉ”์ธ์ฃผ์†Œ์˜ ๋ฃจํŠธ(/)๋ฅผ ๊ฐ€๋ฆฌํ‚ด

  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Message State Server์˜ URL์„ ๊ธฐ์ค€์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” root-endpoint๋Š” Message States Server์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ Location์ธ ํ˜ธ์ŠคํŠธ์˜ ๋ฃจํŠธ(/)์ž„ (ex. Github API์˜ root-endpoint๋Š” https://api.github.com)

path

  • path ํ˜น์€ url-path๋Š” API๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ๋•Œ, ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” key ์—ญํ• 

  • ์„œ๋ฒ„์— ์ •์˜๋œ ๋ฌธ์ž์—ด์— ๋”ฐ๋ผ path๊ฐ€ ๋‹ฌ๋ผ์ง (ex. https://api.github.com/user ์—์„œ๋Š” 'user'๊ฐ€ path)

Last updated