Skip to content

Latest commit

ย 

History

History
187 lines (132 loc) ยท 7.31 KB

Rest.md

File metadata and controls

187 lines (132 loc) ยท 7.31 KB

REST(Representational State Transfer)

REST๋Š” ์›น์˜ ์ฐฝ์‹œ์ž(HTTP) ์ค‘์˜ ํ•œ ์‚ฌ๋žŒ์ธ Roy Fielding์˜ 2000๋…„ ๋…ผ๋ฌธ์— ์˜ํ•ด์„œ ์†Œ๊ฐœ๋˜์—ˆ๋‹ค. ์›น์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์•„ํ‚คํ…์ณ๋ฅผ ์†Œ๊ฐœํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ REST ์ด๋‹ค.

  • ํ•ด์„ : ์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ ๋ฅผ ์ฃผ๊ณ , ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ

๊ตฌ์„ฑ ์š”์†Œ

์•„๋ž˜ 3๊ฐ€์ง€ ์š”์†Œ๊ฐ€ REST ์˜ ํ•ต์‹ฌ 3๊ฐ€์ง€ ์š”์†Œ!

์ž์›, ์กฐ์ž‘, ํ‘œํ˜„


  1. ์ž์› ์ด๋ž€ ?
  • ์„œ๋ฒ„์— ์žˆ๋Š” ๊ฒƒ
  • DB ์•ˆ์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ex) ์œ ์ € , ์ฃผ๋ฌธ ๋“ฑ
  • ๋˜๋Š”, ์ด๋ฏธ์ง€ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค. number_24 , number_25 ex) https://www.123rf.com/stock-photo/number_24.html
  • URI ๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•˜๊ณ , ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ์กฐ์ž‘ ์ด๋ž€?
  • Client๋Š” HTTP Method(POST, GET, DELETE, PUT)๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง€์ •ํ•œ ์ž์›์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ์š”์ฒญํ•œ๋‹ค.

  1. ํ‘œํ˜„ ์ด๋ž€?
  • Client๊ฐ€ Server์—๊ฒŒ, ์ž์›์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ์š”์ฒญํ•˜๋ฉด Server๋Š” ์ด์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ์‘๋‹ต(Representation)์„ ๋ณด๋‚ธ๋‹ค.

์ •๋ฆฌ

REST์˜ ๊ตฌ์ฒด์ ์ธ ๊ฐœ๋…์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์‚ฌ์ด์—์„œ, HTTP URL์„ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method(POST, GET, DELETE, PUT ๋“ฑ)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ์š”์ฒญํ•˜๊ณ , ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.



Rest์˜ ๊ธฐ๋ณธ ์›์น™ 6๊ฐ€์ง€

Rest ๊ธฐ๋ณธ ์›์น™ 6 ๊ฐ€์ง€๋ฅผ ์ง€ํ‚ค๋Š” ๊ฒƒ์„ Restful ํ•˜๋‹ค๊ณ  ํ‘œํ˜„

1. ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ชจ๋ธ

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์—ญํ• ์ด ๋ถ„๋ฆฌ๋˜์–ด ๋…๋ฆฝ์ ์œผ๋กœ ๊ต์ฒด ๋ฐ ๊ฐœ๋ฐœ ๋  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์˜์—ญ์ด ๋ถ„๋ฆฌ๋  ์ˆ˜ ์žˆ์–ด ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ๋งค์šฐ ์‰ฌ์›Œ์ง„๋‹ค

2. ๋ฌด์ƒํƒœ

  • ์„ธ์…˜ ์ƒํƒœ๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ƒํƒœ, ํ•„์š”์— ๋”ฐ๋ผ ์™ธ๋ถ€ DB ์— ์ €์žฅํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

  • server๋Š” ๋‹จ์ˆœํžˆ ์š”์ฒญ์ด ์˜ค๋ฉด ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์„ธ์…˜ ๊ด€๋ฆฌ๋Š” client์—๊ฒŒ ์ฑ…์ž„์ด ์žˆ๋‹ค.

    • ์žฅ์  : scaling ์ด ์ž์œ ๋กญ๋‹ค.


3. ์บ์‹œ ๊ฐ€๋Šฅ

  • REST๋Š” ์›น ํ‘œ์ค€์ธ HTTP๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ HTTP๊ฐ€ ๊ฐ€์ง„ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • HTTP ํ”„๋กœํ† ์ฝœ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํƒœ๊ทธ๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ์บ์‹ฑ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์บ์‹ฑ ์ฒ˜๋ฆฌ๋Š” GET ์š”์ฒญ์—์„œ ์ฃผ๋กœ ์ฒ˜๋ฆฌ ๋œ๋‹ค. (post, put ์œผ๋กœ๋„ ๊ฐ€๋Šฅ์€ ํ•˜๋‚˜, ์ž˜ ์•ˆ์“ด๋‹ค.)
    • ๊ด€๋ จ ํ—ค๋”๋“ค
      • If-Match
        • client ๊ฐ€ ํ•จ๊ป˜ ๋ณด๋‚ธ Etag ์‹๋ณ„์ž์™€ ๊ฐ™์€ ๊ฐ’์ด ์žˆ์œผ๋ฉด 200
        • ๋‹ค๋ฅธ ๊ฐ’์ด ์žˆ์œผ๋ฉด 412 http code ๋กœ ์‘๋‹ต, ๋ฎ์–ด์“ฐ๊ธฐ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
      • If-Modified-Since
        • Last-Modified ์˜ ๊ฐ’์„ ํ‘œ๊ธฐํ•˜์—ฌ ์ „๋‹ฌํ•ด์ฃผ๊ณ , ๋™์ผํ•œ ์ปจํ…์ธ ๋ผ๋ฉด ( ์ตœ์ข… ์ˆ˜์ • ์‹œ๊ฐ„์ด ๊ฐ™๋‹ค๋ฉด ) 304 http code ๋กœ ์‘๋‹ต
        • ๋งŒ์•ฝ ๋‹ค๋ฅธ ์ปจํ…์ธ ๋ผ๋ฉด (If-Modified-Since ์— ๋“ค์–ด๊ฐ„ last-modified ๊ฐ’๋ณด๋‹ค ์ดํ›„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ๋‹ค๋ฉด) 200 ์œผ๋กœ ์‘๋‹ต
      • If-None-match : ETag ์‹๋ณ„์ž์™€ ๊ฐ™์€ ๊ฐ’์ด๋ผ๋ฉด 304๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ๋‹ค๋ฅธ ๊ฐ’์ด๋ผ๋ฉด 200์„ ์‘๋‹ตํ•œ๋‹ค. ์‹ ๊ทœ ๊ฐ’์„ ์ƒ์„ฑํ•˜๊ณ , ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ๊ธˆ์ง€ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
    • ์บ์‹ฑ ๊ด€๋ จ ๊ฒ€์ฆ ํ—ค๋”
      • ETag
      • last-modified

    • ์ฐธ๊ณ 
      • 412 : Precondition Failed , ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜ ์‘๋‹ต ์ฝ”๋“œ๋Š” ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๊ฐ€ ๊ฑฐ๋ถ€๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
      • ETag : ETag HTTP ์‘๋‹ต ํ—ค๋”๋Š” ํŠน์ • ๋ฒ„์ „์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. (like ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ)

4. ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ

  • REST API๋งŒ ๋ณด๊ณ ๋„ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

5. Layerd System (๊ณ„์ธตํ™”)

  • ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ๋Š” REST API ์„œ๋ฒ„๋งŒ ํ˜ธ์ถœํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ, REST ์„œ๋ฒ„๋Š” ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์•”ํ˜ธํ™” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•ด ๊ตฌ์กฐ์ƒ์˜ ์œ ์—ฐ์„ฑ์„ ๋‘˜ ์ˆ˜ ์žˆ๊ณ  PROXY, ๊ฒŒ์ดํŠธ์›จ์ด ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์ค‘๊ฐ„๋งค์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ๋‚ด๋ถ€ ๋ ˆ์ด์–ด๋ฅผ ์ˆจ๊ธฐ๊ณ , ์ธ์ ‘ํ•œ ๋ ˆ์ด์–ด์—๋งŒ ๊ณต๊ฐœํ•จ์œผ๋กœ์จ ๋ ˆ์ด์–ด๊ฐ„์˜ ๊ฒฐํ•ฉ์„ ์ค„์ธ๋‹ค.

6. Uniform Interface (์œ ๋‹ˆํผ ์ธํ„ฐํŽ˜์ด์Šค)

  • HTTP ํ‘œ์ค€๋งŒ ๋”ฐ๋ฅธ๋‹ค๋ฉด ์–ด๋–ค ์–ธ์–ด ํ˜น์€ ์–ด๋–ค ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉํ•˜์—ฌ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์Šคํƒ€์ผ์ด๋‹ค.
  • ์•ˆ๋“œ๋กœ์ด๋“œ ํ”Œ๋žซํผ, IOS ํ”Œ๋žซํผ ๋“ฑ ํŠน์ • ์–ธ์–ด๋‚˜ ํ”Œ๋žซํผ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.




REST API ๋””์ž์ธ ๊ฐ€์ด๋“œ

  1. URI ์˜ ๋ฆฌ์†Œ์Šค๋ช…์€ ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋™์‚ฌ๋ณด๋‹ค๋Š” ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ž
GET    /members/delete/1

delete ์™€ ๊ฐ™์€ ํ–‰์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œํ˜„์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ์ˆ˜ ๋ช…์‚ฌ๋ณด๋‹ค๋Š” ๋ณต์ˆ˜ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ž

  1. ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํ‘œํ˜„ํ•˜์ž
DELETE   /members/1

์˜๋ฏธ : ํšŒ์›๋“ค ์ค‘์—์„œ id 1๋ฒˆ์„ ๊ฐ€์ง„ ํšŒ์› ์‚ญ์ œ

  1. ํ•˜์ดํ”ˆ(-) ์€ URI ์˜ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜์ž ๋ฐ‘์ค„(_) ์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

  2. ์Šฌ๋ž˜์‹œ ๊ตฌ๋ถ„์ž(/) ๋Š” ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜์ž URI ์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

GET    /members/1/ (X)
GET    /members/1  (O)
  1. ํŒŒ์ผ ํ™•์žฅ์ž๋Š” URI ์— ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. Accept header ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…์ธ  ํƒ€์ž…์„ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํƒ€์ž…์„ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด์„  ์ด ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.


๋ฆฌ์†Œ์Šค ๊ฐ„์˜ ๊ด€๊ณ„ ํ‘œํ˜„ํ•˜๊ธฐ

  1. ์†Œ์œ ์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ
GET     /users/{userId}/devices ( ์œ ์ €๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋””๋ฐ”์ด์Šค ๋ชฉ๋ก )
  1. ๊ตฌ์ฒด์ ์ธ ํ‘œํ˜„์ด ํ•„์š”ํ•  ๋•Œ
GET    /users/{userId}/likes/devices ( ์œ ์ €๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๋””๋ฐ”์ด์Šค ๋ชฉ๋ก )


์‘๋‹ต ๋ฉ”์„ธ์ง€ ์ฒ˜๋ฆฌํ•˜๊ธฐ

์ž˜ ์„ค๊ณ„๋œ API ๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์‘๋‹ต๊นŒ์ง€๋„ ์ž˜ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

  1. 200๋Œ€
  • 200 : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰
  • 201 : POST ๋ฅผ ํ†ตํ•œ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์ž‘์—… ์‹œ, ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋จ์„ ์•Œ๋ ค์คŒ
  1. 400๋Œ€
  • 400 : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋ถ€์ ์ ˆํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • 401 : ์ธ์ฆ๋˜์ง€ ์•Š์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต
  • 403 : ์ธ๊ฐ€๋˜์ง€ ์•Š์€, ์‘๋‹ตํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋ ค ํ•  ๋•Œ ์ด์— ๋Œ€ํ•œ ์‘๋‹ต
  • 405 : ์š”์ฒญ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ method ๋ฅผ ์ด์šฉํ–ˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต
  1. 500๋Œ€
  • 500 : ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต ์ฝ”๋“œ
  1. 300๋Œ€
  • 301 : ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ URI ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต ์ฝ”๋“œ

Reference