RESTful API
RESTful API
๐ก REST ํน์ง์ ์งํค๋ฉด์ API๋ฅผ ์ ๊ณตํ๋ค๋ ์๋ฏธ !
REST(Representational State Transfer) ๋?</br> ์น์ ์กด์ฌํ๋ ๋ชจ๋ ์์(ex ์ด๋ฏธ์ง,๋์์ ๋ฐ์ดํฐ)์ ๊ณ ์ ํ URI๋ฅผ ๋ถ์ฌํ์ฌ ์์์ ๋ํ ์ฃผ์๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ๋ก ๋๋ ๊ท์น์ผ๋ก ์ค๋๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๋ค.
1. ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ ์ง์
- URI(Uniform Resource Identifier)
- ํด๋น ์ฌ์ดํธ์ ํน์ ์์์ ์์น๋ฅผ ๋ํ๋ด๋ ์ ์ผํ ์ฃผ์
/login
,/news
๋ฑ
- HTTP Method
- HTTP request๊ฐ ์๋ํ๋ action์ ์ ์ํ ๊ฒ
GET
,POST
๋ฑ
- Payload
- HTTP request์์ server๋ก ๋ณด๋ด์ง๋ ๋ฐ์ดํฐ (body)
2. Representational State Transfer๋?
- ์น์์์ ์ฌ์ฉ๋๋ ์ฌ๋ฌ ๋ฆฌ์์ค๋ฅผ HTTP URI๋ก ํํํ๊ณ ๊ทธ ๋ฆฌ์์ค์ ๋ํ ํ์๋ฅผ HTTP Method๋ก ์ ์ํ๋ ๋ฐฉ์
โก๏ธ ๋ฆฌ์์ค(HTTP URI๋ก ์ ์๋)๋ฅผ ์ด๋ป๊ฒ ํ๋ค(HTTP Method + Payload)๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ๊น๋ํ๊ฒ ํํ
3. REST์ ํน์ง
- Uniform(์ ๋ํผ ์ธํฐํ์ด์ค)
- ๋ฆฌ์์ค์ ๋ํ ์กฐ์์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํํ๋ ์ํคํ ์ณ ์คํ์ผ์ด๋ค.
- Stateless(๋ฌด์ํ์ฑ)
- ์์ ์ ์ํ ์์ฑ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง์๋๋ค. ์ธ์ ์ ๋ณด๋ ์ฟ ํค์ ๋ณด๋ฅผ ๋ณ๋๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ API ์๋ฒ๋ ๋ค์ด์ค๋ ์์ฒญ๋ง์ ๋จ์ํ ์ฒ๋ฆฌ๋ง ํด์ฃผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ด ์ฝ๊ณ ๋จ์ํด์ง๋ค.
- ์บ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ(Cacheable)
- HTTP๋ผ๋ ๊ธฐ์กด ์นํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด ์ธํ๋ผ ๊ทธ๋๋ก ํ์ฉ ๊ฐ๋ฅํ๋ค.
- Self-doescriptiveness(์์ฒด ํํ ๊ตฌ์กฐ)
- REST API ๋ฉ์ธ์ง๋ง ๋ณด๊ณ ๋ ๊ทธ ์์ฒญ์ด ์ด๋ค ํ์๋ฅผ ํ๋์ง ์ ์ ์๋ค.
- Client - Server ๊ตฌ์กฐ
- ํด๋ผ์ด์ธํธ๋ ์ ์ ์ ๊ด๋ จ๋ ์ฒ๋ฆฌ, ์๋ฒ๋ REST API๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ๊ฐ๊ฐ์ ์ญํ ์ด ํ์คํ ๊ตฌ๋ถ๋๊ณ , ๊ฐ๋ฐํด์ผ ํ ๋ด์ฉ์ด ๋ช ํํด์ง๊ณ , ์๋ก๊ฐ์ ์์กด์ฑ์ด ์ค์ด๋ ๋ค.
- ๊ณ์ธตํ(Layered System)
- ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํด ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ์ ๋ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์, ๊ฒ์ดํธ์จ์ด ๋ฑ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
RESTful API ์ค๊ณ ๊ท์น
- URI ์ ๋ณด๋ ๋ช ํํ๊ฒ ํํํด์ผ ํ๋ค
-
๋ฆฌ์์ค๋ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ค. ex) GET/user/1 โ GET/users/1
- ๋ฆฌ์์ค์ ๋ํ ํ์๋ฅผ HTTP Method(GET,POST,PUT,DELETE)๋ก ํํํ๋ค.
- URI์ HTTP Method๊ฐ ํฌํจ๋์๋ ์๋๋ค. ex) GET delete/user/1 โ DELETE /users/1
- ๋์ฌ๊ฐ ํํจ๋์๋ ์๋๋ค. ex) GET /user/show/1 โ GET /users/1
- ๋ฆฌ์์ค ์ฌ์ด์ ์ฐ๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ
- /๋ฆฌ์์ค/๊ณ ์ ID/๊ด๊ณ ์๋ ๋ฆฌ์์ค ex) GET /users/{user_id}/profile
-
URI๋ / ๊ตฌ๋ถ์๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉํ๋ค.
- ex) GET users/portfolios
- URI ๋ง์ง๋ง ๋ฌธ์๋ก /๋ฅผ ํฌํจํ์ง ์๋๋ค.
- ๋ถ๊ฐํผํ๊ฒ URI๊ฐ ๊ธธ์ด์ง๋ ๊ฒฝ์ฐ -์ ์ฌ์ฉํ์ฌ ๊ฐ๋ ์ฑ์ ๋์ธ๋ค.
- _๋ ์ฌ์ฉํ์ง ์๋๋ค.
- URI ๊ฒฝ๋ก์๋ ๋๋ฌธ์ ์ฌ์ฉ์ ํผํ๋๋ก ๊ท์ ํ๊ณ ์๋ค.
- ํ์ผ์ ๊ฒฝ์ฐ payload์ ํฌ๋งท์ ๋ํ๋ด๊ธฐ ์ํ ํ์ผ ํ์ฅ์๋ฅผ URI์ ํฌํจ์ํค์ง ์๋๋ค.
RESTful ํ์ง ๋ชปํ API ์ค๊ณ ์์
<๋์ ์์> <์ข์ ์์>
http://ํธ์คํธ/detail_page => http://ํธ์คํธ/product
http://ํธ์คํธ/main_page => http://ํธ์คํธ/products
http://ํธ์คํธ/find/product => http://ํธ์คํธ/product
http://ํธ์คํธ/add/product => http://ํธ์คํธ/product
http://ํธ์คํธ/product_reviews => http://ํธ์คํธ/product/1/reviews
http://ํธ์คํธ/product_filter => http://ํธ์คํธ/product?name="abc"