๐Ÿ‘‰ RESTful API

  • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ ( ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์ด๋ผ๋Š” ๊ฑด ์ œ์•ฝ ์กฐ๊ฑด์˜ ์ง‘ํ•ฉ)
    ๋”ฐ๋ผ์„œ RESTful API๋Š” REST ์•„ํ‚คํ…์ฒ˜ ์›์น™์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š” API

> REST์™€ RESTful์€ ์—„๊ฒฉํ•˜๊ฒŒ ๋‹ค๋ฅธ ์˜๋ฏธ

๐Ÿ‘‰ ํ•„์š”ํ•œ ์ด์œ 

  1. RESTful API๋ฅผ ์„œ๋น„์Šคํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์–ด๋–ค ๋‹ค๋ฅธ ๋ชจ๋“ˆ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด๋ผ๋„ RESTful API๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ๊ฐ„์— ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
  2. WEB๋ธŒ๋ผ์šฐ์ € ์™ธ์˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•ด์„œ (๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ)

    ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ html๊ฐ™์€ ํŒŒ์ผ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์€ ๋ฌด๊ฒ๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ชจ๋“  ์•ฑ์— ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์•Œ๋งž์ง€ ์•Š์•˜๋Š”๋ฐ RESTful API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ๋งŒ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์œ ๋กญ๊ณ  ๋ถ€๋‹ด์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉ๊ฐ€๋Šฅ. ์„œ๋ฒ„๋„ ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊น”๋”ํ•˜๊ฒŒ ๋ณด๋‚ด์ฃผ๋ฉด๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋ฒผ์›Œ์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ข‹์•„์ง„๋‹ค.
    ์ฐธ๊ณ  < https://jeong-pro.tistory.com/180 >

๐Ÿ‘‰ REST์˜ ๊ตฌ์„ฑ ์š”์†Œ

HTTP URI = ์ž์›
HTTP Method = ํ–‰๋™
MIME Type = ํ‘œํ˜„ ๋ฐฉ์‹

GET /100 HTTP/1.1
Host : jeong-pro.tistory.com

// URI = '/100' , HTTP Method = 'GET'
// MIME Type = Response Http head ๋ฉ”์„ธ์ง€์— Content-type์œผ๋กœ ์“ฐ์—ฌ์ง„๋‹ค 

๐Ÿ‘‰ ์ œ์•ฝ ์กฐ๊ฑด

  1. Client / Server
  2. Stateless : ๊ฐ ์š”์ฒญ์— ํด๋ผ์ด์–ธํŠธ์˜ context๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
  3. Cacheable : ํด๋ผ์ด์–ธํŠธ๋Š” ์‘๋‹ต์„ ์บ์‹ฑํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  4. Layered System : ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ๋ฏธ๋“ค์›จ์–ด์— ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์•Œ ํ•„์š”๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค.
  5. Code on demand(option) : ์„œ๋ฒ„์—์„œ ์ฝ”๋“œ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด์„œ ์‹คํ–‰ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  6. uniform interface : ์ž์›์€ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๊ณ , HTTP Method๋กœ ํ‘œํ˜„์„ ๋‹ด์•„์•ผ ํ•˜๊ณ , ๋ฉ”์„ธ์ง€๋Š” ์Šค์Šค๋กœ๋ฅผ ์„ค๋ช…ํ•ด์•ผํ•œ๋‹ค. ๋˜ ํ•˜์ดํผ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๊ฐ€ ์ „์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.

    [ RESTful ํ•˜๋ ค๋ฉด uniform interface๋ฅผ ์ž˜ ์ง€์ผœ์•ผ ํ•œ๋‹ค. ]

RESTful API๋ฅผ ์ด์šฉํ•ด์„œ ํ•˜๋‚˜์˜ ํฐ ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆํ™”๋œ ์ž‘์€ ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ฒŒ ๋๊ธฐ ๋•Œ๋ฌธ

URI = Uniform Resource Identifier / URL = Uniform Resource Locator
REST์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์„ Resource๋กœ ํ‘œํ˜„. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ž์›์€ ์œ ์ผํ•œ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋ฐ˜๋ฉด์— ๊ณผ๊ฑฐ์˜ ์›น์—์„œ๋Š” Identifier์˜ ๊ฐœ๋…์ด ๋”ฐ๋กœ ํ•„์š”์—†์—ˆ๋‹ค. html๊ฐ™์€ ํŒŒ์ผ๋“ค์„ ์ฃผ๊ณ  ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” Locator๋ฅผ ์ด์šฉํ–ˆ๋‹ค. URI๊ฐ€ ํŒŒ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ์ž์›๋“ค ๊นŒ์ง€๋„ ํฌํ•จํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ƒ ์ •ํ•ด์ง„ ๊ทœ์น™๋Œ€๋กœ routing ์ฃผ์†Œ๋ฅผ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— route ์ด๋ฆ„์„ ์ง“๋Š” ์ˆ˜๊ณ ๋ฅผ ๋œ ์ˆ˜ ์žˆ๊ณ , ํ†ต์ผ์„ฑ์ด ์žˆ๋‹ค.

๐Ÿ“ƒ API์˜ ํ™•์žฅ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค