README
# RESTful API
REST๋ ?
REST๋ REpresentational State Transfer์ ์ฝ์
์ด๋ค.
REST๋ Resource Oriented Architecture
์ฆ, HTTP๊ธฐ๋ฐ์ผ๋ก ํ์ํ ์์์ ์ ๊ทผํ๋ ๋ฐฉ์์ ์ ํด๋์ ์ํคํ
์ณ์ด๋ค. API ์ค๊ณ์ ์ค์ฌ์ ์์(Resource)์ด ์๊ณ HTTP Method๋ฅผ ํตํด ์์์ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณํ๋ ๊ฒ์ด๋ค.
์ฝ๊ฒ ๋งํด์ ์น์ ์กด์ฌํ๋ ๋ชจ๋ ์์(์ด๋ฏธ์ง, ๋์์, DB์์)์ ๊ณ ์ ํ URI๋ฅผ ๋ถ์ฌํด ํ์ฉํ๋ ๊ฒ์ผ๋ก ์์์ ์ ์ ํ๊ณ ์์์ ๋ํ ์ฃผ์๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ๋ก ์ ์๋ฏธํ๋ค๊ณ ํ๋ค.
์ฌ๊ธฐ์ ~ful ์ด๋ผ๋ ํ์ฉ์ฌํ ์ด๋ฏธ๋ฅผ ๋ถ์ฌ ~ํ API ๋ผ๋ ํํ์ผ๋ก ์ฌ์ฉ๋๋ค. ์ฆ REST์ ๊ธฐ๋ณธ ์์น์ ์ฑ์คํ ์งํจ ์๋น์ค ๋์์ธ์ RESTfulํ๋ค
๋ผ๊ณ ํํํ ์ ์๋ค.
REST ๊ตฌ์ฑ
์์ (Resource) - URI
ํ์ (Verb) - HTTP Method
ํํ (Representations)
REST์ ํน์ง
Uniform(์ ๋ํผ ์ธํฐํ์ด์ค)
HTTP ํ์ค์๋ง ๋ฐ๋ฅธ๋ค๋ฉด, ์๋๋ก์ด๋/IOS ํ๋ซํผ์ด๋ , ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ ๋ชจ๋ ํ๋ซํผ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์กฐ์์ด ๊ฐ๋ฅํ ์ํคํ ์ฒ ์คํ์ผ์ ์๋ฏธํ๋ค.
Stateless(๋ฌด์ํ์ฑ)
REST๋ ๋ฌด์ํ์ฑ ์ฑ๊ฒฉ์ ๊ฐ์ต๋๋ค. ๋ค์๋งํด ์์ ์ ์ํ ์ํ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ๊ฑฐ ๊ด๋ฆฌํ์ง ์์ต๋๋ค. ์ธ์ ์ ๋ณด๋ ์ฟ ํค์ ๋ณด๋ฅผ ๋ณ๋๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ API์๋ฒ๋ ๋ค์ด์ค๋ ์์ฒญ๋ง์ ๋จ์ํ ์ฒ๋ฆฌํ๋ฉด ๋ฉ๋๋ค. ๋๋ฌธ์ ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง๊ณ ์๋ฒ์์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ์ง ์์์ผ๋ก์จ ๊ตฌํ์ด ๋จ์ํด ์ง๋๋ค.
Casheable(์บ์๊ฐ๋ฅ)
REST์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋๋ HTTP๋ผ๋ ๊ธฐ์กด ์น ํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ๋ผ์ HTTP ๊ฐ ๊ฐ์ง ์บ์ฑ ๊ธฐ๋ฅ์ด ์ ์ฉ ๊ฐ๋ฅํฉ๋๋ค. HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ Last-Modifiedํ๊ทธ๋ E-Tag๋ฅผ ์ด์ฉํ๋ฉด ์บ์ฑ ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค.
Self-descriptivness (์์ฒด ํํ ๊ตฌ์กฐ)
๋์ฌ(Method) + ๋ช ์ฌ(URI) ๋ก ์ด๋ฃจ์ด์ ธ ์์ด ์ด๋ค ๋ฉ์๋์ ๋ฌด์จ ํ์๋ฅผ ํ๋์ง ์ ์ ์์ผ๋ฉฐ, ๋ฉ์์ง ํฌ๋งท ์ญ์ JSON์ ์ด์ฉํด์ ์ง๊ด์ ์ผ๋ก ์ดํด๊ฐ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก, REST API ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ด๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
Client - Server ๊ตฌ์กฐ
REST ์๋ฒ๋ API ์ ๊ณต, ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ ์ปจํ ์คํธ(์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด)๋ฑ์ ์ง์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ๊ฐ๊ฐ์ ์ญํ ์ด ํ์คํ ๊ตฌ๋ถ๋๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ๊ฐ๋ฐํด์ผ ํ ๋ด์ฉ์ด ๋ช ํํด์ง๊ณ ์๋ก๊ฐ ์์กด์ฑ์ด ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค.
๊ณ์ธตํ ๊ตฌ์กฐ
REST ์๋ฒ๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํด ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ์ ๋ ์ ์๊ณ PROXY, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
๋ํ์ ์ธ HTTP ๋ฉ์๋ 4๊ฐ์ง
GET : ํด๋น ๋ฆฌ์์ค๋ฅผ ์กฐํ
POST : ํด๋น URL๋ฅผ ์์ฒญํ๋ฉด ๋ฆฌ์์ค๋ฅผ ์์ฑ
PUT : ํด๋น ๋ฆฌ์์ค๋ฅผ ์์
DELETE ํด๋น ๋ฆฌ์์ค๋ฅผ ์ญ์
URI ์ค๊ณ ์ ์ฃผ์ํ ์
์ฌ๋์ ๊ตฌ๋ถ์(/)๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ
URI ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์(/)๋ฅผ ํฌํจํ์ง ์๋๋ค.
ํ์ดํ(-)์ URI์ ๊ฐ๋ ์ฑ์ ๋์ด๋๋ฐ ์ฌ์ฉ
๋ฐ์ค(_)์ URI์ ์ฌ์ฉํ์ง ์๋๋ค.
URI ๊ฒฝ๋ก์๋ ์๋ฌธ์๊ฐ ์ ํฉํ๋ค.
ํ์ผํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค.
References
Last updated
Was this helpful?