ํฌ์ŠคํŠธ

๐ŸŒš REST API

๐Ÿ’ซ REST API


๐Ÿซง API

  • Application Programming Interface
  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ป˜ ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค
  • API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‚ด๋ถ€ ๊ตฌํ˜„ ๋กœ์ง์„ ์•Œ์ง€ ๋ชปํ•ด๋„ ์ •์˜๋˜์–ด ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

  • ์—ฌ๊ธฐ์„œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์–ด๋–ค ์žฅ์น˜๊ฐ„ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค.
  • i.e. ๋งˆ์šฐ์Šค, ํ‚ค๋ณด๋“œ, ํ„ฐ์น˜ํŒจ๋“œ

๐Ÿซง REST

  • Representational State Transfer, ์ž์› ์ƒํƒœ ์ „๋‹ฌ?
  • ์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž์›์˜ ์ƒํƒœ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ํ†ต์‹  ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜

  • HTTP URI๋ฅผ ํ†ตํ•ด Resource์„ ๋ช…์‹œํ•˜๊ณ ,
  • HTTP Method๋ฅผ ํ†ตํ•ด ํ•ด๋‹น Resource์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ
    • ์ž์›์„ ๊ตํ™˜ํ•˜๋Š” ๊ฒƒ
  • ๊ทธ ๊ฒฐ๊ณผ๋ฅผ HTTP Status Code๋กœ ์‘๋‹ตํ•˜๋Š” ๊ฒƒ

๐Ÿซง Resource

  • Collection : ๋ณต์ˆ˜์˜ ์ž์›์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ž์›
    • https://api.example.com/topics
  • Element : ๋‹จ์ˆ˜์˜ ์ž์›์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ž์›
    • https://api.example.com/topics/1234
    • https://api.example.com/topics/rest-api

๐Ÿซง Method

  • CRUD Operation
    • Create : POST
    • Read : GET
    • Update : PUT, PATCH
    • Delete : DELETE

๐Ÿซง REST ํŠน์ง•

  • Server-Client ๊ตฌ์กฐ
    • ์ž์›์ด ์žˆ๋Š” ์ชฝ์ด Server, ์ž์›์„ ์š”์ฒญํ•˜๋Š” ์ชฝ์ด Client
    • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
  • Stateless
    • ์š”์ฒญ ๊ฐ„์˜ ํด๋ผ์ด์–ธํŠธ ์ •๋ณด๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด์„œ๋Š” ์•ˆ๋จ (๊ทœ์น™)
    • ์„œ๋ฒ„๋Š” ๊ฐ ์š”์ฒญ์„ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ
    • ์ด์ „ ์š”์ฒญ์ด ๋‹ค์Œ ์š”์ฒญ์— ์˜ํ–ฅ์„ ์ฃผ๋ฉด ์•ˆ๋จ
  • Cacheable
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต์„ ์บ์‹œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
      • HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— HTTP์˜ ํŠน์ง•์ธ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
    • ๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์บ์‹œ๋ฅผ ์‚ฌ์šฉ
  • ๊ณ„์ธตํ™” (Layered System)
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ ๊ตฌ์„ฑ๊ณผ ์ƒ๊ด€์—†์ด REST API ์„œ๋ฒ„๋กœ ์š”์ฒญ
    • ์„œ๋ฒ„๋Š” ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Œ (๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ๋ณด์•ˆ ์š”์†Œ, ์บ์‹œ ๋“ฑ)
  • Code on Demand (Optional)
    • ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ฝ”๋“œ ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ(๋กœ์ง)์„ ์ „๋‹ฌํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋Šฅ ํ™•์žฅ
  • ์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ (Uniform Interface)
    • ์ •๋ณด๊ฐ€ ํ‘œ์ค€ ํ˜•์‹์œผ๋กœ ์ „์†ก๋˜๊ธฐ ์œ„ํ•ด ๊ตฌ์„ฑ ์š”์†Œ๊ฐ„ ํ†ตํ•ฉ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณต
    • HTTP ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ๋” ์„ค๊ณ„

๐Ÿซง REST ์žฅ์ 

  • HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ํ˜ธํ™˜๊ฐ€๋Šฅ
  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ
  • ์—ฌ๋Ÿฌ ์„œ๋น„์Šค ์„ค๊ณ„์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™”

๐Ÿซง REST API

  • REST ์•„ํ‚คํ…์ฒ˜์˜ ์กฐ๊ฑด์„ ์ค€์ˆ˜ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค
  • RESTful : REST ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์›น ์„œ๋น„์Šค

๐Ÿซง REST API ํŠน์ง•

  • REST ๊ธฐ๋ฐ˜์œผ๋กœ ์‹œ์Šคํ…œ์„ ๋ถ„์‚ฐํ•˜์—ฌ ํ™•์žฅ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž„
  • HTTP ํ‘œ์ค€์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์–ด ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿซง REST API ์„ค๊ณ„ ๊ทœ์น™

  • ์›น๊ธฐ๋ฐ˜์˜ REST API๋ฅผ ์„ค๊ณ„ํ•  ๊ฒฝ์šฐ์—๋Š” URI๋ฅผ ํ†ตํ•ด ์ž์›์„ ํ‘œํ˜„ํ•ด์•ผ ํ•จ
    • https://api.example.com/v1/users/1234
    • Resource : users
    • Resource ID : 1234
  • โญ ์ž์›์— ๋Œ€ํ•œ ์กฐ์ž‘์€ Method๋ฅผ ํ†ตํ•ด ํ‘œํ˜„ํ•ด์•ผ ํ•จ
    • URI์— ํ–‰์œ„๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋จ
      • URI๋Š” ์ž์›์„ ํ‘œํ˜„
    • HEADER๋ฅผ ํ†ตํ•ด CRUD๋ฅผ ํ‘œํ˜„ํ•˜์—ฌ ๋™์ž‘์„ ์š”์ฒญํ•ด์•ผ ํ•จ
  • ๋ฉ”์„ธ์ง€๋ฅผ ํ†ตํ•œ ๋ฆฌ์†Œ์Šค ์กฐ์ž‘
    • HEADER๋ฅผ ํ†ตํ•ด content-type์„ ์ง€์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ
    • ๋Œ€ํ‘œ์  ํ˜•์‹์œผ๋กœ๋Š” HTML, XML, JSON, TEXT ๋“ฑ์ด ์žˆ์Œ
      • ์ด๊ฑด REST๊ฐ€ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜
  • ๋ฌธ๋ฒ•, ํ‘œ๊ธฐ๋ฒ•
    • URI์—๋Š” ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉ
    • Resource์˜ ์ด๋ฆ„์ด๋‚˜ URI๊ฐ€ ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ ํ•˜์ดํ”ˆ(-)์„ ์‚ฌ์šฉ
    • ์–ธ๋”๋ฐ”(_)๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
    • ํŒŒ์ผ ํ™•์žฅ์ž๋Š” URI์— ํฌํ•จํ•˜์ง€ ์•Š์Œ

๐Ÿ’ซ Ref

์ฐธ๊ณ  : โ€˜๊ธฐ๊ณ„๋“ค์˜ ๋Œ€ํ™”๋ฒ• - REST APIโ€™
์ฐธ๊ณ  : โ€˜โ€˜REST APIโ€™์— ๋Œ€ํ•ด [ ์Šคํ”„๋ง ๋ถ€ํŠธ (Spring Boot) ]โ€™

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.