Bibi's DevLog ๐Ÿค“๐ŸŽ

REST API๊ฐ€ ๋ญ”๊ฐ€์š”? - ์ธํ„ฐํŽ˜์ด์Šค, API, REST API, HTTP method ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ

REST API๊ฐ€ ๋ญ”๊ฐ€์š”? - ์ธํ„ฐํŽ˜์ด์Šค, API, REST API, HTTP method

๋น„๋น„ bibi 2021. 3. 17. 00:28

REST API๊ฐ€ ๋ญ”๊ฐ€์š”? - ์ธํ„ฐํŽ˜์ด์Šค, API, REST API, HTTP method

์ธํ„ฐํŽ˜์ด์Šค๋ž€?

: ์†Œํ†ต์ฐฝ๊ตฌ

์‚ฌ์šฉ์ž๊ฐ€ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๊ฒŒ ํ•ด์ฃผ๊ณ , ์‹คํ–‰๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•จ.

์–ด๋–ค ๊ธฐ๊ณ„๋ฅผ ๋งŒ๋“ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ๊ธฐ๋Šฅ์„ ์ „๋ถ€ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์–ด์žฅ์น˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ.

(TV-๋ฆฌ๋ชจ์ปจ, ์žํŒ๊ธฐ-๋ฒ„ํŠผ, ์ปดํ“จํ„ฐ-ํ‚ค๋ณด๋“œ์™€ ๋งˆ์šฐ์Šค์ฒ˜๋Ÿผ. )

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ, ๋ฒ„ํŠผ, ์Šคํฌ๋กค๋ฐ”, ์Šฌ๋ผ์ด๋”, ๋ธŒ๋ผ์šฐ์ € ์ฐฝ ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์ œ์–ดํ•˜๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. (UI : User Interface, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค)

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๊ณ„-๊ธฐ๊ณ„, ์†Œํ”„ํŠธ์›จ์–ด-์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์ด์—์„œ๋„ ์ˆ˜๋งŽ์€ ์š”์ฒญ๊ณผ ์ •๋ณด๊ตํ™˜์ด ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ, ์ด๋ฅผ ์œ„ํ•œ ์ฐฝ๊ตฌ๋ฅผ API๋ผ๊ณ  ํ•œ๋‹ค.

API๋ž€?

Application Programming Interface.

: ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด๋กœ๋ถ€ํ„ฐ ์ง€์ •๋œ ํ˜•์‹์œผ๋กœ ์š”์ฒญ/๋ช…๋ น์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ฐฝ๊ตฌ(์ธํ„ฐํŽ˜์ด์Šค)

์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์ƒ์ฒญ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ธฐ์ƒ์ •๋ณด๋ฅผ ์ œ๊ณต๋ฐ›์œผ๋ ค๋ฉด ๊ธฐ์ƒ์ฒญ์ด ์ง€์ •ํ•œ ํ˜•์‹์œผ๋กœ ์š”์ฒญํ•ด์•ผ ํ•œ๋‹ค.

REST API๋ž€?

RESTํ•œ ํ˜•์‹์˜ API.

: ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ ์žˆ์–ด ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์— ๋„๋ฆฌ ์“ฐ์ด๋Š” ํ˜•์‹์˜ ์ผ์ข….

HTTP ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ, ์–ด๋–ค URI์— ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ฐœ๋ฐœ์ž ์‚ฌ์ด์— ๋„๋ฆฌ ์ง€์ผœ์ง€๋Š” ์•ฝ์†์ด๋‹ค

(์šฐ์ฒด๊ตญ์—์„œ ํƒ๋ฐฐ๋ฅผ ๋ณด๋‚ด๋ ค๋ฉด ์†ก์žฅ์ด๋ผ๋Š” 'ํ˜•์‹'์„ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ)

โ€ป ๊ธฐ์ˆ , ์ œํ’ˆ์ด ์•„๋‹Œ 'ํ˜•์‹'์ด๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/ํ”„๋ ˆ์ž„์›Œํฌ ... ์— ๊ด€๊ณ„์—†์ด ์ด ํ˜•์‹์— ๋งž์ถฐ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

REST API์˜ ํ•ต์‹ฌ์€?

"๊ฐ ์š”์ฒญ์ด ์–ด๋–ค ๋™์ž‘/์ •๋ณด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ธ์ง€๋ฅผ, ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฃผ์†Œ์˜ ๋ชจ์Šต ๋งŒ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค" ์ด๋‹ค.

URL์„ ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ์งœ๋„ ๋™์ž‘๋งŒ ์ž˜ ํ•˜๋ฉด ์„œ๋น„์Šค ๊ธฐ๋Šฅ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์„œ๋น„์Šค๋Š” ๊ฐœ๋ฐœ์ž ํ˜ผ์ž์„œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ํ˜ผ์ž ๋งŒ๋“ค๋”๋ผ๋„ ๊ทธ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ทธ API๋ฅผ ์ด์šฉํ•˜๊ธฐ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • ์š”์ฒญํ•˜๋Š” ์ •๋ณด(๋ช…์‚ฌ)๋ฅผ URL๋กœ ํ™œ์šฉํ•œ๋‹ค.
    • URI๋Š” ๋™์‚ฌ๊ฐ€ ์•„๋‹Œ ๋ช…์‚ฌ๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค
  • ๊ณ ์œ ๋ฒˆํ˜ธ (์ˆซ์ž)๋Š” index๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด https://www.codingschool.com/classes/2/students/15 ์™€ ๊ฐ™์ด URL์„ ๊ตฌ์„ฑํ•˜๋ฉด, ์ด ์ฃผ์†Œ๋ฅผ ๋ณด๊ณ  'codingschool์˜ 2๋ฐ˜ 15๋ฒˆ ํ•™์ƒ์˜ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฑฐ๊ตฌ๋‚˜'๋ผ๊ณ  ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.(URI, ์ž์›์„ ๊ตฌ์กฐ์™€ ํ•จ๊ป˜ ๋‚˜ํƒ€๋‚ด๋Š” ๊ตฌ๋ถ„์ž)

์„œ๋ฒ„์— REST API๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋–„๋Š” HTTP ๊ทœ์•ฝ์— ๋”ฐ๋ผ ์‹ ํ˜ธ๋ฅผ ์ „์†กํ•œ๋‹ค.

HTTP method

: HTTP๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ.

GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH ... ๊ฐ€ ์žˆ๋‹ค

์šฐ์ฒด๊ตญ์—์„œ ํƒ๋ฐฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ์ผ๋ฐ˜, ๋“ฑ๊ธฐ, ํŠน์†ก ๋“ฑ์ด ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

  • RestAPI์—์„œ๋Š” ์ด ์ค‘ GET, POST, PUT, DELETE (+ PATCH)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • POST, PUT, PATCH๋Š” BODY๋ผ๋Š” ์ฃผ๋จธ๋‹ˆ๊ฐ€ ์žˆ์–ด, GET๋˜๋Š”DELETE๋ณด๋‹ค ์ •๋ณด๋“ค์„ ๋” ๋งŽ์ด, ์•ˆ์ „ํ•˜๊ฒŒ ๊ฐ์ถฐ์„œ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

โ€ป POST๋งŒ์œผ๋กœ๋„ ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์‚ญ์ œ ๋“ฑ์„ ๋‹ค ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ˆ„๊ตฌ๋“  ์š”์ฒญ์˜ ์˜๋„๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชฉ์ ์— ๋”ฐ๋ผ HTTP method๋ฅผ ๊ตฌ๋ถ„ํ•ด ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰ Restfulํ•˜๊ฒŒ URL์„ ๋งŒ๋“ค์–ด, HTTPmethod๋งŒ์œผ๋กœ๋„ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅํ•œ ์š”์ฒญ๋“ค๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•œ๋‹ค

HTTP method๋ฅผ ์‚ฌ์šฉํ•œ REST API์˜ CRUD ๊ตฌํ˜„

  • GET : ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ (Read)

    • GET, https://www.codingschool.com/classes/2/students

      : codingschool์˜ 2๋ฐ˜ ํ•™์ƒ๋“ค์„ ์กฐํšŒํ•˜๊ฒ ๋‹ค๋Š” ์š”์ฒญ

  • POST : ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€(Create)

    • POST, https://www.codingschool.com/classes/2/students

      BODY ์— ์ƒˆ ํ•™์ƒ์˜ ์ •๋ณด

      : codingschool์˜ 2๋ฐ˜ ํ•™์ƒ์— ์ƒˆ๋กœ์šด ์ •๋ณด(ํ•™์ƒ)์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ์š”์ฒญ

  • PUT / PATCH : ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ (Update)

    • PUT / PATCH, https://www.codingschool.com/classes/2/students/14

      BODY์— ์ˆ˜์ •ํ•  ํ•™์ƒ์˜ ์ •๋ณด

      : codingschool์˜ 2๋ฐ˜์˜ 14๋ฒˆ ํ•™์ƒ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒ ๋‹ค๋Š” ์š”์ฒญ

    • ์‚ฌ์šฉ๋ฒ•์€ ํšŒ์‚ฌ๋งˆ๋‹ค, ๊ฐœ๋ฐœ์ž๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด์ง€๋งŒ

      • PUT : ์ •๋ณด๋ฅผ ํ†ต์งธ๋กœ ๊ฐˆ์•„ ๋ผ์šธ ๋•Œ ์‚ฌ์šฉ
      • PACTH : ์ •๋ณด ์ค‘ ์ผ๋ถ€๋ฅผ ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉ
  • DELETE : ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ(Delete)

    • DELETE, https://www.codingschool.com/classes/2/students/3

      : codingschool์˜ 2๋ฐ˜์˜ 3๋ฒˆ ํ•™์ƒ ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๊ฒ ๋‹ค๋Š” ์š”์ฒญ

์‹ฌํ™”ํ•™์Šต : REST API์— ๋Œ€ํ•ด ๋” ๊ณต๋ถ€ํ•˜๊ธฐ

๊ทธ๋Ÿฐ RestAPI๋กœ ๊ดœ์ฐฎ์€๊ฐ€, restful api design guidelines ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์ข‹์€ ์ž๋ฃŒ๊ฐ€ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ .

์ถ”๊ฐ€ : API ์˜ ์˜๋ฏธ?

API์˜ ์˜๋ฏธ๊ฐ€ ํ—ท๊ฐˆ๋ ค์„œ ๊ทธ๋ฃน์› ๋ถ„๋“ค๊ป˜ ์งˆ๋ฌธ์„ ๋“œ๋ ค ๋ณด์•˜๋‹ค.

(Pyro, August ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ™‡โ€โ™€๏ธ๐Ÿ™‡โ€โ™€๏ธ!!)

API๋Š” ''์ธํ„ฐํŽ˜์ด์Šค''๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. (์ธํ„ฐํŽ˜์ด์Šค = ์—ฐ๊ฒฐ๋‹ค๋ฆฌ.)

ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ณ  ๊ทธ๊ฒƒ์„ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ๋•Œ, ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜๋‹จ์„ API๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ ๋‚ด๋ถ€๋ฅผ ๊นŒ๋ณด์ง€ ์•Š์•„๋„ (๋กœ์ง์„ ๋ชฐ๋ผ๋„) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ๋ชฐ๋ผ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก '์™ธ๋ถ€์‚ฌ์šฉ์ž'์—๊ฒŒ ์—ฐ๊ฒฐ๋‹ค๋ฆฌ๋ฅผ ๋†“์•„์ฃผ๋Š”๊ฒƒ์„ ๋ชจ๋‘ API๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ” ๋‹จ์œ„์—์„œ์˜ API๋Š” ํ•จ์ˆ˜ ๋‹จ์œ„ (๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ)์ด๋ฉฐ,

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ArrayList ๊ฐ™์€ ๊ฒƒ๋„ import ํ•ด์„œ ์“ฐ๋‹ˆ api๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ๋‚ด๊ฐ€ ์Šค์Šค๋กœ ์ž๋ฐ”๋กœ ์ž˜ ์ž‘์„ฑํ•œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด importํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ๋„ api์ด๋‹ค.