kohigowild
REST API๊ฐ ๋จผ๋ฐ์... ๋ณธ๋ฌธ
๐ก REST
Representational State Transfer
- ์์ (Resource) : URI
- ํ์ (Verb) : HTTP Method
- ํํ (Representations) : Server ์๋ต
HTTP URI๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ HTTP Method(POST, GET, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, REST๋ ์์ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ ์ค๊ณ์ ์ค์ฌ์ Resource๊ฐ ์๊ณ , HTTP Method๋ฅผ ํตํด Resource๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋ ์ํคํ ์ฒ๋ฅผ ์๋ฏธํ๋ค.
์ํ๋ฅผ ๊ฒ์ํ๋ ์ฌ์ดํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์ ๋
- /createMovie
- /seeMovie
- /getMovie/inception
- /deleteMovie/inception
- /updateMovie/inception
- /getTopRatedMovies
- /findMoviesFromThisYear
API๋ฅผ ์ด๋ ๊ฒ ์ค๊ณํ๋ ๊ฒฝ์ฐ ๋ช ํํ ํจํด์ด ์๊ธฐ ๋๋ฌธ์ ํ์๋ค์ด ์ดํดํ๊ธฐ ํ๋ค๋ค. ํ์ค์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ค์ด ์๊ธฐ ์ํด์๋ URL์์ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ช ์ฌ๋ง ๋จ๊ธด๋ค.
Movies
Inception (unique identifier)
- /movies
- /movies/inception
ํด๋น API URI์ HTTP method๋ฅผ ๊ฒฐํฉํ๋ค.
๐ก HTTP method
GET | ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ ์ทจ๋ |
POST | ์๋ฒ์ ๋ฐ์ดํฐ ์ถ๊ฐ, ์์ฑ |
PUT | ์๋ฒ์ ๋ฐ์ดํฐ ๊ฐฑ์ , ์์ฑ |
DELETE | ์๋ฒ์ ๋ฐ์ดํฐ ์ญ์ |
- GET /movies : ๋ชจ๋ ์ํ ๋ฆฌ์คํธ๋ฅผ ์ทจ๋ํ๋ค.
- POST /movies : ์ํ ๋ฆฌ์คํธ๋ฅผ ์ถ๊ฐํ๋ค.
- GET /movies/inception : ์ธ์ ์ ์ ์ ๋ณด๋ฅผ ์ทจ๋ํ๋ค.
- PUT /movies/inception : ์ธ์ ์ ์ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๋ค.
- DELETE /movies/inception : ์ธ์ ์ ์ ์ญ์ ํ๋ค.
๊ฒ์์ด๋ ํํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ค. ํ์ด์ง๋ค์ด์ ๋ ๊ฐ๋ฅํ๋ค.
- /movies?min_rating=9.8
- /movies?release_date=2021
- /movies?pageNum=2&size=8
๐ก REST์ ํน์ง
- Server - Client ๊ตฌ์กฐ
- ์์์ด ์๋ ์ชฝ์ด ์๋ฒ, ์์์ ์์ฒญํ๋ ์ชฝ์ด ํด๋ผ์ด์ธํธ๊ฐ ๋๋ค.
- Stateless
- ์ด์ ์ ์์ฒญ์ด ๋ค์์ ์์ฒญ์ ์ฐ๊ด๋์ง ์๋๋ค. ์ธ์ ์ ๋ณด๋ ์ฟ ํค ์ ๋ณด๋ฅผ ๋ณ๋๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์๊ธฐ ๋๋ฌธ์ API ์๋ฒ๋ ๋ค์ด์ค๋ ์์ฒญ๋ง์ ๋จ์ํ ์ฒ๋ฆฌํ๋ค. ์ด๋ฅผ ํตํด ์๋ฒ์ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ผ๊ด์ฑ์ ๋ถ์ฌํ๊ณ ๋ถํ์ํ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ์ง ์์์ผ๋ก์จ ๊ตฌํ์ด ๋จ์ํด์ง๋ค.
- Cacheable
- HTTP์ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์๋ค.
- Uniform Interface
- URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์กฐ์์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํํ๋ ์ํคํ ์ฒ ์คํ์ผ
- ์์ฒด ํํ ๊ตฌ์กฐ
- REST API ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ด๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ
- ๊ณ์ธตํ ๊ตฌ์กฐ
- REST ์๋ฒ๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํด ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ์ ๋ ์ ์๊ณ , Proxy, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
๐ก REST์ ์ฅ์
- REST API ๋ฉ์์ง๋ฅผ ์ฝ๋ ๊ฒ๋ง์ผ๋ก๋ ๋ฉ์์ง๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ๋ช
ํํ๊ฒ ํ์
ํ ์ ์๋ค.
- Statelessํ ํน์ง ๋๋ฌธ์ ํด๋น URI์ ์ํ๋ ๋ฉ์๋ ์์ฒด๋ง ๋ ๋ฆฝ์ ์ผ๋ก ์ดํดํ๋ฉด ๋จ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์ญํ ์ด ๋ช ํํ๊ฒ ๋ถ๋ฆฌ๋์ด ์์ด ์ ๋ฌด๋ ๊ฐ์, ํ๋ซํผ ๋ ๋ฆฝ์ฑ ํ์ฅ์ ํจ๊ณผ
- ํค๋ ๋ถ๋ถ์ URI ์ฒ๋ฆฌ ๋ฉ์๋๋ฅผ ๋ช
์ํจ์ผ๋ก์จ, ํ์ํ ์ค์ ๋ฐ์ดํฐ๋ฅผ ํ์ด๋ก๋(๋ฐ๋)์ ํํํ ์ ์๋๋ก ๊ตฌ์ฑํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ํน์ ๋ฉ์๋์ ์ธ๋ถ์ ์ธ ํํ ๋ฌธ๊ตฌ๋ฅผ JSON, XML ๋ฑ ๋ค์ํ ์ธ์ด๋ฅผ ์ด์ฉํ์ฌ ์์ฑํ ์ ์๋ค๋ ์ฅ์ ๋ฟ๋ง ์๋๋ผ, ๊ฐ๊ฒฐํ ํค๋ ํํ์ ํตํ ๊ฐ๋ ์ฑ ํฅ์์ด๋ผ๋ ํจ๊ณผ๊ฐ ์๋ค.
๐ก REST์ ๋จ์
- ๋ฉ์๋ ํํ๊ฐ ์ ํ์ ์ด๋ค.
- ๊ณต์ํ๋ API ๋์์ธ ๊ฐ์ด๋๊ฐ ์กด์ฌํ์ง ์๋๋ค.
๐ก Reference
'mitmitwiki' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ธ๋ผ์ฐ์ ๋ ๋๋ง ์๋ฆฌ (0) | 2023.04.27 |
---|---|
async / await ๊ฐ๋ ์ ๋ฆฌ (Feat. ๋๊ธฐ, ๋น๋๊ธฐ) (2) | 2023.04.15 |
ํ์ด์ด๋ฒ ์ด์ค๋ก ๋ฌดํ ์คํฌ๋กค ๊ตฌํํ๊ธฐ (1) | 2023.04.08 |
ํ์ด์ด๋ฒ ์ด์ค๋ก ํค์๋ ๊ฒ์ ๊ตฌํํ๊ธฐ (0) | 2023.04.07 |
Proxy ๊ทธ๊ฒ ๋ชฌ๋ฐ ์ด๋ก์ผ ํ๋ ๊ฑด๋ฐ (Vite Proxy ์ค์ ) (0) | 2023.04.02 |