[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] REST API

JiEunยท2023๋…„ 3์›” 29์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

REST API, REST ์„ฑ์ˆ™๋„ ๋ชจ๋ธ 3๋‹จ๊ณ„, OPEN API ๋“ฑ์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.
์ด์ „์— ํ•™์Šตํ–ˆ๋˜ HTTP/๋„คํŠธ์›Œํฌ ์„ ํ–‰ ํ•™์Šต์„ ํ•ด์•ผ ์–ด๋Š ์ •๋„ ์ดํ•ด๊ฐ€ ๊ฐ€๋Š” ์˜์—ญ์ธ ๊ฑฐ ๊ฐ™๋‹ค.


๐Ÿ“REST API

REST(Representational State Transfer)

  • ์›น(http)์„ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ™œ ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜

API(Application Programming Interface)

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋žจ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ค„์ž„๋ง
  • ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์–ธ์–ด๋‚˜ ๋ฉ”์‹œ์ง€ ํ˜•์‹์œผ๋กœ ์ค‘๊ฐ„ ์—ญํ• ์ž์ด๋‹ค.

REST API

์ธํ„ฐ๋„ท๊ณผ ์›น์„ ํ†ตํ•ด์„œ ๋‚˜์˜ ์ปดํ“จํ„ฐ๋ฅผ ์ œ์–ดํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ์ค„์ด๊ณ  ๋” ์ข‹์€ API๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ๊ณ ๋ฏผํ•˜๋ฉฐ ์ƒ๊ธด๊ฒŒ REST API์ด๋‹ค.

  • ์›น์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ์ž์›(Resource)๋ฅผ HTTP URI๋กœ ํ‘œํ˜„ํ•˜๊ณ ,
    HTTPํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  1. Resource๋Š” URI ํ†ตํ•ด ํ‘œํ˜„ํ•œ๋‹ค.
    topices(์ •๋ณด ๋ฐ์ดํ„ฐ)
  2. Collection : URI๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ (Element๊ฐ€ ๋ชจ์—ฌ์žˆ๋Š” ๊ฒƒ)
    http://example.com/topics (๋ณต์ˆ˜ํ˜• ์‚ฌ์šฉ)
  3. Elemet : ํ•˜๋‚˜ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ (Collection์˜ ํ•˜๋‚˜ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ)
    http://eveample.com/topics/1

Resource๋Š” CRUD์— ๋งž๊ฒŒ ์ž‘์—…ํ•œ๋‹ค.

  • Creat(์ƒ์„ฑ) : post
  • Read(์ฝ๊ธฐ) : get
  • Update(์ˆ˜์ •) :
    - put : ๊ต์ฒด
    - patch : ์ˆ˜์ •
  • Delete(์‚ญ์ œ) : delete

์ด๊ฒƒ๋“ค์„ method๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿ“REST ์„ฑ์ˆ™๋„ 4๋‹จ๊ณ„ ๋ชจ๋ธ (REST API ๋””์ž์ธ ๋ฐฉ๋ฒ•)

REST API ์ž‘์„ฑ์‹œ ๋ช‡ ๊ฐ€์ง€ ์ง€์ผœ์•ผํ•  ๊ทœ์น™์ด ์กด์žฌํ•˜๊ณ  ์ด๋ฅผ 4๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ ๋†จ๋‹ค.

โœ”๏ธ 0 ๋‹จ๊ณ„(HTTP ์‚ฌ์šฉ) - ๊ธฐ๋ณธ๋‹จ๊ณ„

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

โœ”๏ธ 1 ๋‹จ๊ณ„(๊ฐœ๋ณ„ ๋ฆฌ์†Œ์Šค์™€์˜ ํ†ต์‹  ์ค€์ˆ˜)

  • ๋ชจ๋“  Resource๋Š” ๊ฐœ๋ณ„ ๋ฆฌ์†Œ์Šค์— ๋งž๋Š” ์—”๋“œํฌ์ธํŠธ(Endpoint)๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
  • ์š”์ฒญํ•˜๊ณ  ๋ฐ›๋Š” ์ž์›์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์‘๋‹ต์œผ๋กœ ์ „๋‹ฌํ•ด์•ผํ•œ๋‹ค.

์—”๋“œํฌ์ธํŠธ ์ž‘์„ฑ์‹œ

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

์š”์ฒญ์— ๋”ฐ๋ฅธ ์‘๋‹ต์œผ๋กœ ๋ฆฌ์†Œ์Šค ์ „๋‹ฌํ•  ๋•Œ

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

0,1 ๋‹จ๊ณ„์—์„œ ๋ชจ๋“  ์š”์ฒญ์„ CRUD์™€ ์ƒ๊ด€์—†์ด POST ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ 2 ๋‹จ๊ณ„(HTTP ๋ฉ”์†Œ๋“œ ์›์น™ ์ค€์ˆ˜)

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

0, 1 ๋‹จ๊ณ„์—์„œ ๋ชจ๋“  ์š”์ฒญ์„ CRUD์— ์ƒ๊ด€์—†์ด POST๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋˜๋‚˜
2 ๋‹จ๊ณ„์— ๋”ฐ๋ฅด๋ฉด CRUD์— ์ ํ•ฉํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ์‹œ ๋ช‡ ๊ฐ€์ง€ ๊ทœ์น™

  • GET : ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค์ง€ ์•Š๋Š” ์š”์ฒญ์— ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
  • POST : ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • PUT : ์š”์ฒญ๋งˆ๋‹ค ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฉฑ๋“ฑ(idempotent) : ๋งค ์š”์ฒญ๋งˆ๋‹ค ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํŠน์ง•
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€๋Š” PUT๊ณผ ๊ทธ๋ ‡์ง€ ์•Š๋Š” POST์™€ ๊ตฌ๋ถ„ํ•ด ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

2๋‹จ๊ณ„ ๊นŒ์ง€ ์ ์šฉํ•ด๋„ ์ž˜ ์ž‘์„ฑ๋œ API๋ผ๊ณ  ํ•œ๋‹ค.
๋‹จ, 3๋‹จ๊ณ„ ๊นŒ์ง€ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ API๋Š” HTTP API๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

โœ”๏ธ 3 ๋‹จ๊ณ„(HATEOAS ์ค€์ˆ˜)

  • HATEOAS(Hypermedia As The Engine Of Application State)๋ผ ํ‘œํ˜„๋˜๋Š” ํ•˜์ดํผ ๋ฏธ๋””์–ด ์ปจ๋“œ๋กค์„ ์ ์šฉํ•œ๋‹ค.
  • ์‘๋‹ต ๋‚ด ์ƒˆ๋กœ์šด ๋งํฌ๋ฅผ ๋„ฃ์–ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ์ ‘๊ธ‰ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.(ํ•ต์‹ฌ)
  • 3๋‹จ๊ณ„ ์š”์ฒญ์€ 2๋‹จ๊ณ„์™€ ๋™์ผํ•˜์ง€๋งŒ
    ์‘๋‹ต์—๋Š” ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ํฌํ•จํ•œ ๋งํฌ ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•ด ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.

๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‘๋‹ต์— ๋‹ด๊ฒจ ์žˆ๋Š” ๋งํฌ๋“ค์„ ๋ˆˆ์—ฌ๊ฒจ ๋ณธ๋‹ค๋ฉด,
์ด๋Ÿฌํ•œ ๋งํฌ๋“ค์€ ์ข€ ๋” ์‰ฝ๊ณ , ํšจ์œจ์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค์™€ ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Open API

  • ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์—ด๋ ค์žˆ๋Š” API
  • ๊ทธ๋ ‡๋‹ค๊ณ  "๋ฌด์ œํ•œ"์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • API๋งˆ๋‹ค ์ •ํ•ด์ง„ ์ด์šฉ ์ˆ˜์น™์ด ์กด์žฌํ•˜๊ณ  ์ˆ˜์น™์— ๋”ฐ๋ฅธ ์ œํ•œ์‚ฌํ•ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. (๊ฐ€๊ฒฉ, ์ •๋ณด ์ œํ•œ ๋“ฑ)

Open Weather Map์ด๋ผ๋Š” ์›น ์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‚ ์”จ API๊ฐ€ ๊ทธ ์˜ˆ์‹œ์ด๋‹ค.

๐Ÿ“API Key

  • API๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” API Key๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • ์ž์›(Resource)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์ค€๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ๊ฒฝ์šฐ API Key๋ฅผ ๊ฐ™์ด ์ „๋‹ฌํ•ด์•ผ ์›ํ•˜๋Š” ์ •๋ณด ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

โœ๏ธ ๋งˆ์น˜๋ฉฐ

์ด์ „ ํ•™์Šต HTTP/๋„คํŠธ์›Œํฌ ๊ธฐ์ดˆ๊ฐ€ ์ƒ๊ฐ ๋ณด๋‹ค ์ดํ•ด๊ฐ€ ์ž˜ ๊ฐ€์ง€ ์•Š์•˜๋‹ค.
์ด๋ฒˆ REST API๋„ ๊ทธ๋Ÿฌ๋ฉด ์–ด์ฉŒ์ง€ ํ–ˆ๋‹ค.

๋ถ€ํŠธ์บ ํ”„์—์„œ ์ œ๊ณตํ•œ ํ•™์Šต ๋‚ด์šฉ ๋งŒ์œผ๋กœ๋Š” ์—ญ์‹œ๋‚˜ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์› ๊ณ 
์œ ํŠœ๋ธŒ ๊ฐ•์˜(์ƒํ™œ์ฝ”๋”ฉ, ์ฝ”๋”ฉ์• ํ”Œ)๋ฅผ ์ฐพ์œผ๋ฉฐ ์–ด๋Š ์ •๋„ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ณต๋ถ€ํ•  ๋•Œ ์ฐธ๊ณ ํ–ˆ๋˜ ์˜์ƒ

์ƒํ™œ์ฝ”๋”ฉ(๊ธฐ๊ณ„๋“ค์˜ ๋Œ€ํ™”๋ฒ• - REST API) : https://youtu.be/PmY3dWcCxXI
์ฝ”๋”ฉ์• ํ”Œ(API ์„ค๋ช…) : https://youtu.be/ckSdPNKM2pY

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

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