REST API

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

REST ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๋Š” API

Representational State Transfer์˜ ์•ฝ์ž๋กœ ์ž์›(data)๋ฅผ ์ด๋ฆ„(ํ‘œํ˜„)์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ (์›น ์‹œ์Šคํ…œ์˜ ๊ธฐ๋ณธ์„ ์œ ์ง€ํ•˜๋ฉด์„œ, ๋…๋ฆฝ์ ์ธ ์ง„ํ™”๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•)

data๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ์ด data์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋กœ์ด ํ•„๋”ฉ์ด http์„ค๊ณ„ ์šฐ์ˆ˜์„ฑ์— ๋น„ํ•ด ์ œ๋Œ€๋กœ ์‚ฌ์šฉ๋˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ๊ฐ™์•„ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์š”ํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ ๋ฐœํ‘œํ•œ ๊ฒƒ

HTTP URI(Uniform Resource Identifier)๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method(Post/Get/Put/Delete)๋กœ ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋Š” Json/Xml๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

๊ตฌ์„ฑ

  • ์ž์›(Resource) : URI

  • ํ–‰์œ„(Verb) : Method

  • ํ‘œํ˜„

ํŠน์ง•

  • Uniform Interface : ์ •ํ•ด์ง„ ๋ฐฉ๋ฒ•์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์•„ํ‚คํ…์ณ ์Šคํƒ€์ผ ์ด๋‹ค.

  • Stateless : ์„ธ์…˜/์ฟ ํ‚ค์™€ ๊ฐ™์€ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ณ„๋„๋กœ ์ €์žฅ ๊ด€๋ฆฌ ํ•˜์ง€ ์•Š์•„ ์„œ๋น„์Šค ์ž์œ ๋„๊ฐ€ ๋†’์•„์ง„๋‹ค.

  • Casheable : httpํ”„๋กœํ† ์ฝœ ํ‘œ์ค€์˜ last-modified๋‚˜ E-Tag๋ฅผ ์ด์šฉํ•ด ์บ์‹ฑ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • client-server : ์„œ๋ฒ„๋Š” api๋ฅผ ์ œ๊ณตํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž์ธ์ฆ, ์ปจํ…์Šค๋“ฑ ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์—ญํ• ์ด ํ™•์‹คํžˆ ๊ตฌ๋ถ„์ด ๋˜์–ด ์„œ๋กœ๊ฐ„ ์˜์กด์„ฑ์ด ์ค„์–ด๋“ ๋‹ค.

  • Self-descriptiveness : ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ  ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์‰ฝ๊ฒŒ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค.

  • ๊ณ„์ธตํ˜• ๊ตฌ์กฐ : ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด ๋ณด์•ˆ/๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ/์•”ํ˜ธํ™” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•ด ๊ตฌ์กฐ์ƒ ์œ ์—ฐ์„ฑ์„ ๋‘˜ ์ˆ˜ ์žˆ๊ณ , Proxy/GateWay ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์ค‘๊ฐ„๋งค์ฒด๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹จ์ 

  • ํ‘œ์ค€์ด ์กด์žฌ ํ•˜์ง€ ์•Š์•„ REST API๊ทœ์น™์ด ์ œ๋Œ€๋กœ ์ ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

    • Self-Describtive Message : ๋ฉ”์„ธ์ง€๋งŒ ๋ณด๊ณ  ํ•ด์„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ํ˜„์žฌ, post๋ฅผ ๋‚จ๋ฐœํ•˜๋Š” api๊ฐ€ ๋งŽ๋‹ค.

      • ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

        1. ๋ฏธ๋””์–ด ํƒ€์ž…์„ ์ •์˜ํ•˜๊ณ , IANA์— ๋“ฑ๋กํ•˜๊ณ  ๊ทธ ๋ฏธ๋””์–ด ํƒ€์ž…์„ ๋ฆฌ์†Œ์Šค ๋ฆฌํ„ดํ• ๋•Œ, Content-Type์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

        2. profile ๋งํฌ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ (๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €๋“ค์ด ์ŠคํŽ™์„ ์ง€์›์„ ์ž˜ ์•ˆํ•˜๊ธฐ ๋•Œ๋ฌธ์— HAL์˜ ๋งํฌ ๋ฐ์ดํ„ฐ์— profile๋งํฌ ์ถ”๊ฐ€)

    • HATEOAS (Hypermedia As The Engine Of Application State) : ํ•˜์ดํผ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ƒํƒœ ์ด๋™์ด ์ผ์–ด๋‚˜์•ผ ํ•œ๋‹ค. (๋งํฌ๊ฐ€ ์—†์œผ๋ฉด ์ƒํƒœ ์ „์ด๋Š” ๋ถˆ๊ฐ€๋Šฅ)

      • ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

        1. ๋ฐ์ดํ„ฐ์— ๋งํฌ๋ฅผ ์ œ๊ณต : ๋งํฌ๋ฅผ HAL์„ ์ด์šฉํ•ด ์ •์˜

Last updated