RESTful API

๋‚ด ๊ณต๋ถ€๋Š” ๋‚ด๊ฐ€ ํ•œ๋‹ค, ๋‚ด๊ณต๋‚ดํ•œโ€ฆ

์ •๋ฆฌ๋œ ๋‚ด์šฉ์€ โ€œ์ธํ”„๋Ÿฐ-Spring Cloud๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(MSA)โ€ ๊ฐ•์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

RESTful Web Service ๋‹จ๊ณ„

LEVEL 0

ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์›น ์„œ๋น„์Šค๋กœ ๊ฒฝ์œ ํ•ด ์ „๋‹ฌ๋ฐ›๋Š” ์ตœ์†Œํ•œ์˜ ๋ชฉ์ ๋งŒ ๋‹ฌ์„ฑ. URL์— action์„ ๋ฐ”๋กœ ๋…ธ์ถœ์‹œํ‚จ ํ˜•ํƒœ

ex)

LEVEL 1

ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ URL์— ์ ์ ˆํ•˜๊ฒŒ ํ‘œ๊ธฐํ•จ. URL์˜ ํ˜•์‹์€ ์˜ฌ๋ฐ”๋ฅด๋‚˜ HTTP Methods๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์Œ

ex)

LEVEL 2

๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ ์ ˆํ•œ URL ํ˜•์‹, ๊ทธ๋ฆฌ๊ณ  ์„œ๋น„์Šค์˜ ํ˜•ํƒœ, ์ž‘์—…์˜ ์šฉ๋„ ๋ฐ ์ข…๋ฅ˜์— ๋งž๋Š” ์ ์ ˆํ•œ HTTP Methods๋ฅผ ์‚ฌ์šฉ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐ˜ํ™˜ ๊ฐ’์˜ ์„ฑ๊ณต/์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ์—๋Ÿฌ์ฝ”๋“œ๋กœ ๋ถ„๊ธฐํ•˜์—ฌ ํ‘œํ˜„

  • Request ์‹œ GET, POST, PUT, DELETE Methods ์‚ฌ์šฉ
  • Response๋Š” 200, 400, 404, 500 ๋“ฑ์˜ ์—๋Ÿฌ์ฝ”๋“œ๋กœ ๋ถ„๊ธฐ

LEVEL 3

LEVEL2 + HATEOAS ๋ฆฌ์†Œ์Šค์™€ ํ•จ๊ป˜ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ์–ด๋–ค ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋ฐ˜ํ™˜(Data + Next Possibel Actions)

์˜ˆ๋ฅผ ๋“ค์–ด ํšŒ์›๊ฐ€์ž… ์š”์ฒญ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ๊ฒฝ์šฐ ์—ฌ๊ธฐ์— ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ํ™•์ธํ•  ํ•„์š” ์—†์Œ. ๋ฐ”๋กœ ๋‹ค์Œ ์š”์ฒญ ๊ฐ€๋Šฅํ•œ URI ๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ์Œ.

RESTful Web Service ๊ฐœ๋ฐœ ์‹œ ๊ณ ๋ ค ์‚ฌํ•ญ

  1. Consumer First : ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์†Œ๋น„์ž(์™ธ๋ถ€ ์‹œ์Šคํ…œ, FE ๋“ฑ) ์ž…์žฅ์—์„œ ๊ฐ„๋‹จ ๋ช…๋ฃŒํ•œ API ์„ค๊ณ„ ํ•„์š”
  2. Make best use of HTTP : HTTP Method, ์š”์ฒญ/์‘๋‹ต ํƒ€์ž…, ํ—ค๋” ๊ฐ’ ๋“ฑ์„ ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  3. Request Methods : ์ž‘์—…์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ GET, POST, PUT, DELETE๋กœ ์ ์ ˆํ•˜๊ฒŒ ๋ถ„๊ธฐ ํ•„์š”
  4. Response Status : ์ฒ˜๋ฆฌ ์ƒํƒœ์— ๋”ฐ๋ผ ์‘๋‹ต ์ฝ”๋“œ(200, 404, 400, 201, 401 ๋“ฑ)๋กœ ์˜๋ฏธ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

    • ๋งŒ์•ฝ ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ƒ์— ๋ฌธ์ œ๊ฐ€ ์—†์–ด ์ž‘์—…์€ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰๋œ ๊ฒƒ์ด๋ฏ€๋กœ 500๋ฒˆ๋Œ€, 200๋ฒˆ๋Œ€ ๋ณด๋‹ค๋Š” 404(No Data)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ์Œ
  5. No secure info in URI : ๋ณด์•ˆ๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋Š” ๋ฐ”๋กœ ๋…ธ์ถœ๋˜๋Š” URI์— ๋‹ด์ง€ ๋ง ๊ฒƒ. Spring Security๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํฐ์œผ๋กœ ์ „๋‹ฌ ๊ฐ€๋Šฅ.
  6. Use plurals : ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ๋ณต์ˆ˜ ํ˜•ํƒœ์˜ URI๊ฐ€ ๊ถŒ์žฅ๋จ

    • /users
    • /users/1
  7. Use nouns for resources : action์„ ์˜๋ฏธํ•˜๋Š” ๋™์‚ฌ ํ˜•ํƒœ๋ณด๋‹ค๋Š” resource๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ช…์‚ฌ ํ˜•ํƒœ๋ฅผ ์“ธ ๊ฒƒ. URI๋งŒ์œผ๋กœ ์–ด๋–ค ๋ฆฌ์†Œ์Šค๋ฅผ ์“ฐ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Œ
  8. Define a consistent approach : ์ผ๊ด„๋œ End Point๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ(์ง„์ž…์ ์„ ๋‹จ์ผํ™”). API Gateway ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ˜„ ๊ฐ€๋Šฅ.