RESTful API

RESTful API๋ž€?

REpresentational State Transfer์˜ ์•ฝ์–ด๋กœ์จ, HTTP๋ฅผ ํ™œ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ, ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” API์˜ ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์™œ?

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ„๋ฆฌ ๋ฐ ํ†ตํ•ฉ

  • ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด API์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ

  • ์ดํ•ด๊ด€๊ณ„์— ์žˆ์–ด์„œ ์ฝ”์ŠคํŠธ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ

ํŠน์ง•?

  • ๋‹ค์–‘ํ•œ UI์˜ ์‚ฌ์šฉ : ์ž์›์€ ๋‹จ์ผ URL์„ ํ†ตํ•ด์„œ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, HTTP์™€ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ์˜ ๊ธฐ๋ณธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ์ž์›์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ HTTP ํ‘œ์ค€์—๋งŒ ๋งž๋Š”๋‹ค๋ฉด ์–ด๋– ํ•œ ํ”Œ๋žซํผ์—์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ

  • ํด๋ผ์ด์–ธํŠธ - ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋˜์–ด์•ผ ํ•œ๋‹ค. UI, request ์ˆ˜์ง‘์˜ ๋ฌธ์ œ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์˜์—ญ์ด๊ณ , ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ, ๋ณด์•ˆ ๋“ฑ์€ ์„œ๋ฒ„์˜ ์˜์—ญ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๋Š์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด์„œ ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ ๋˜์–ด์•ผ ํ•œ๋‹ค.

  • stateless operations : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์—†์–ด์•ผ ํ•œ๋‹ค. ํ•„์š”ํ•œ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

  • RESTful ์ž์› ์บ์‹ฑ : ๋ชจ๋“  ์ž์›์— ๋Œ€ํ•ด์„œ ์บ์‹œ๋ฅผ ํ—ˆ์šฉํ•ด ์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    • ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ชจ๋“  GET ์š”์ฒญ์„ ์บ์‹œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ฒ˜๋ฆฌ

    • POST๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์บ์‹œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์ง€๋งŒ, http header์— ๋ช…์‹œ์‹œ, ๊ฐ€๋Šฅํ•˜๋„๋ก ์ฒ˜๋ฆฌ

    • PUT, DELETE๋Š” ์บ์‹œ ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€๋Šฅ

  • Layered system : REST๋Š” ๋‹ค์ˆ˜์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์„œ๋ฒ„๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.

  • code on demand : ๋Œ€๋ถ€๋ถ„ ์„œ๋ฒ„๋Š” ์ •์ ์ธ ์ž์›์„ ๋ณด๋‚ด์ฃผ์ง€๋งŒ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๊ธฐ๋„ ํ•œ๋‹ค. ์ด ์˜๋ฏธ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์„œ๋ฒ„์—์„œ ๋ณด๋‚ด์ค€๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

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

  • resource : URL

  • method : HTTP Method

  • representation of resource : HTML, JSON, XML ๋“ฑ

= URI์„ ํ†ตํ•ด์„œ resource์„ ํ‘œ์‹œํ•ด์ฃผ๊ณ , HTTP Method์„ ์‚ฌ์šฉํ•ด์„œ resource์˜ method์„ ์ •ํ•ด์ค€๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” representation์ด ๊ฐ€๋Šฅํ•œ ๋ชฉ๋ก์„ ๋˜์ ธ์ฃผ๊ณ , ์„œ๋ฒ„๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์„ ํƒํ•œ๋‹ค.

๊ทœ์น™?

  1. ์†Œ๋ฌธ์ž๋งŒ์„ ์‚ฌ์šฉํ•œ๋‹ค(๋Œ€๋ฌธ์ž์™€ ํ˜ผ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค)

  2. ์–ธ๋”๋ฐ”( _ ) ๋Œ€์‹  ํ•˜์ดํ”ˆ( - )์„ ์‚ฌ์šฉํ•œ๋‹ค.

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

  4. ํ–‰์œ„(get, post ๋“ฑ)์„ ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค( ๊ทธ๋Ÿฐ๊ฒƒ๋“ค์€ http method๋กœ, ex - getUser ์ด๋ ‡๊ฒŒ x)

    1. Create : POST

    2. Read : GET

    3. Update

      1. PUT : ๋ชจ๋“  ์š”์†Œ๋“ค์— ๋Œ€ํ•œ ๊ฐ’๋“ค์„ ๋„ฃ์–ด์ค˜์„œ ๋ณด๋‚ด์ค˜์•ผ ํ•œ๋‹ค.

      2. PATCH : ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•˜๋Š” ์š”์†Œ๋งŒ ๋„ฃ์–ด์ค˜์„œ ๋ณด๋‚ด์ค˜์•ผ ํ•œ๋‹ค.

    4. Deleter : DELETE

  5. ํŒŒ์ผ ํ™•์žฅ์ž๋Š” ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค(Accept header๋ฅผ ์‚ฌ์šฉํ•˜์ž) - Accept header๋Š” request์„ ๋ณด๋‚ผ ๋•Œ ์„œ๋ฒ„์—๊ฒŒ ์ด๋Ÿฌํ•œ ํƒ€์ž…์œผ๋กœ ๋ณด๋‚ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉ

  6. ๊ฐ€๊ธ‰์ ์œผ๋กœ resource์˜ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค(๋™์‚ฌ๋Š” ์ตœ๋Œ€ํ•œ ํ”ผํ•˜์ž)

๋‚ด๊ฐ€ ๋งŒ๋“  API๊ฐ€ RESTful ํ•œ์ง€ ํ™•์ธ

์ฐธ๊ณ  https://dzone.com/articles/five-clues-your-api-isnt

  1. ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๋‹จ์ผ ์—”๋“œ ํฌ์ธํŠธ์ธ๊ฐ€?

  2. ๋ชจ๋“  request๊ฐ€ POST๋ฐฉ์‹์ธ๊ฐ€?

  3. URL์— resource์˜ ํ–‰์œ„(method)๊ฐ€ ์žˆ๋Š”๊ฐ€?

  4. URL์— ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”๊ฐ€?

๋‹ค ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด RESTful ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๋‹ด(?) : URI vs URL

๋‘˜ ๋‹ค Uniform Resource ์ด๊ณ , I๋Š” Identifier, L์€ Locator๋กœ ๋‚˜๋ˆ„์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธ์ •์˜

URI์€ ํ†ตํ•ฉ ์ž์› **์‹๋ณ„์ž(ID)**๋กœ ์œ ์ผํ•˜๊ฒŒ ๋…๋ฆฝ์ ์œผ๋กœ ์ž์›์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€์‹œ์ž์ด๋‹ค.

URL์€ URI์˜ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š” ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

URL์€ ์ž์›์˜ ์œ„์น˜, Path์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์ดํŠธ ๋„๋ฉ”์ธ์„ ์˜๋ฏธํ•œ๋‹ค.

์˜ˆ์‹œ๋กœ ๋“ค๋ฉด

https://localhost:8080/index.html

์ด๋ ‡๊ฒŒ ์ž์›์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์€ URL์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, URI ์ด๋ผ๊ณ  ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๋งŒ์•ฝ

https://localhost:8080/user/132

์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” user๊นŒ์ง€๋Š” url์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, 132๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๊ทธ๋ƒฅ 132๋ฒˆ์งธ user๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์‹๋ณ„์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด๋กœ๋Š” uri์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

Last updated

Was this helpful?