HTTP URI๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ , HTTP Method(POST, GET, PUT ,DELETE)๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
REST๋ ์์ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ(ROA, Resource Oriented Architecture) ์ค๊ณ์ ์ค์ฌ์ Resource๊ฐ ์๊ณ HTTP Method๋ฅผ ํตํด Resource๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋ ์ํคํ ์ณ๋ฅผ ์๋ฏธํ๋ค. ์น ์ฌ์ดํธ์ ์ด๋ฏธ์ง, ํ ์คํธ, DB ๋ด์ฉ ๋ฑ์ ๋ชจ๋ ์์์ ๊ณ ์ ํ ID์ธ HTTP URI๋ฅผ ๋ถ์ฌํ๋ค.
๋ฐฉ์(Method) | ์๋ฏธ | ์ญํ |
---|---|---|
POST | Create | POST๋ฅผ ํตํด ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑ |
GET | Select | GET์ ํตํด ํด๋น ๋ฆฌ์์ค๋ฅผ ์กฐํ |
PUT | Update | PUT์ ํตํด ๋ฆฌ์์ค๋ฅผ ์์ |
DELETE | Delete | DELETE๋ฅผ ํตํด ํด๋น ๋ฆฌ์์ค ์ ๊ฑฐ |
PATCH | Update | ๋ฆฌ์์ค ์ผ๋ถ ์์ |
์์(Resource) - URI
ํ์ (Verb) - HTTP Method
ํํ (Representations)
HTTP ํ์ค์๋ง ๋ฐ๋ฅธ๋ค๋ฉด, ์๋๋ก์ด๋/IOS ํ๋ซํผ์ด๋ , ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ ๋ชจ๋ ํ๋ซํผ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์กฐ์์ด ๊ฐ๋ฅํ ์ํคํ ์ฒ ์คํ์ผ์ ์๋ฏธํ๋ค.
REST๋ ๋ฌด์ํ์ฑ ์ฑ๊ฒฉ์ ๊ฐ์ง๋ค. ๋ค์ ๋งํด ์์ ์ ์ํ ์ํ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์๋๋ค. ์ธ์ ์ ๋ณด๋ ์ฟ ํค ์ ๋ณด๋ฅผ ๋ณ๋๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ API ์๋ฒ๋ ๋ค์ด์ค๋ ์์ฒญ๋ง์ ๋จ์ํ ์ฒ๋ฆฌํ๋ฉด ๋๋ค. ๊ทธ๋์ ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง๊ณ ์๋ฒ์์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ์ง ์์์ผ๋ก์จ ๊ตฌํ์ด ๋จ์ํด์ง๋ค.
REST์ ๊ฐ์ฅ ํฐ ํน์ง ์ค ํ๋๋ HTTP๋ผ๋ ๊ธฐ์กด ์น ํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉํ ์ ์๋ค. ๋ฐ๋ผ์ HTTP๊ฐ ๊ฐ์ง ์บ์ฑ ๊ธฐ๋ฅ์ด ์ ์ฉํ ์ ์๋ค. HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ Last-Modified ํ๊ทธ๋ E-Tag๋ฅผ ์ด์ฉํ๋ฉด ์บ์ฑ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
REST์ ๋ ๋ค๋ฅธ ํฐ ํน์ง ์ค ํ๋๋ REST API ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ด๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค๋ ๊ฒ์ด๋ค.
REST ์๋ฒ๋ API ์ ๊ณต, ํด๋ผ์ด์ธํธ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ ์ปจํ ์คํธ(์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด) ๋ฑ์ ์ง์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ก ๊ฐ๊ฐ์ ์ญํ ์ด ํ์คํ ๊ตฌ๋ถ๋๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์์ ๊ฐ๋ฐํด์ผ ํ ๋ด์ฉ์ด ๋ช ํํด์ง๊ณ ์๋ก ๊ฐ ์์กด์ฑ์ด ์ค์ด๋ค๊ฒ ๋๋ค.
REST ์๋ฒ๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํด ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ์ ๋ ์ ์๊ณ PROXY, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
HTTP ํ๋กํ ์ฝ์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก REST API ์ฌ์ฉ์ ์ํ ๋ณ๋์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ ํ์๊ฐ ์๋ค.
HTTP ํ๋กํ ์ฝ์ ํ์ค์ ์ต๋ํ ํ์ฉํ์ฌ ์ฌ๋ฌ ์ถ๊ฐ์ ์ธ ์ฅ์ ์ ํจ๊ป ๊ฐ์ ธ๊ฐ ์ ์๊ฒ ํด์ค๋ค.
HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
Hypermedia API์ ๊ธฐ๋ณธ์ ์ถฉ์คํ ์งํค๋ฉด์ ๋ฒ์ฉ์ฑ์ ๋ณด์ฅํ๋ค.
REST API ๋ฉ์์ง๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ๋ช ํํ๊ฒ ๋ํ๋ด๋ฏ๋ก ์๋ํ๋ ๋ฐ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
์ฌ๋ฌ ๊ฐ์ง ์๋น์ค ๋์์ธ์์ ์๊ธธ ์ ์๋ ๋ฌธ์ ๋ฅผ ์ต์ํํ๋ค.
์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ค.
ํ์ค์ ์์ฒด๊ฐ ์กด์ฌํ์ง ์์ ์ ์๊ฐ ํ์ํ๋ค.
์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๊ฐ 4๊ฐ์ง๋ฐ์ ์๋ค.
HTTP Method ํํ๊ฐ ์ ํ์ ์ด๋ค.
๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ํ ์คํธํ ์ผ์ด ๋ง์ ์๋น์ค๋ผ๋ฉด ์ฝ๊ฒ ๊ณ ์น ์ ์๋ URL๋ณด๋ค Header ์ ๋ณด์ ๊ฐ์ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ์ ๋ฌธ์ฑ์ด ์๊ตฌ๋๋ค.
๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ํธํ์ด ๋์ง ์์ ์ง์ํด์ฃผ์ง ๋ชปํ๋ ๋์์ด ๋ง๋ค.(์ต์คํ๋ก๋ฌ)
์๋ฌธ์ ์ฌ์ฉ(์ต์ํ ๋์๋ฌธ์ ๊ตฌ๋ถ)
ํ์ดํ(-, hypen) ์ฌ์ฉ : ๊ณต๋ฐฑ ์ ๊ฑฐ
ํ์ฅ์ ์ฌ์ฉ ์ง์ : ํค๋์ ๊ฐ์ ๋ฃ๋๋ค.
CRUD๋ URI์ ์ฌ์ฉํด์ ์ ๋๋ค.
Collection : ๋ณต์์ ์ ๋ณด ๋ฆฌ์์ค
Document : ๋จ์์ ์๋ฆฌ๋จผํธ ๋ฆฌ์์ค