REST(REpresentational State Transfer)๋ ๋คํธ์ํฌ ์์์ Client์ Server ์ฌ์ด์ ํต์ ๋ฐฉ์ ์ค ํ๋์ด๋ค. ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ(์ ๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, ์์(resource)์ ํํ(representation)์ ์ํ ์ํ ์ ๋ฌ(state transfer)์ ๋ปํ๋ค.
- ์์ : ํด๋น ์ํํธ์จ์ด๊ฐ ๊ด๋ฆฌํ๋ ๋ชจ๋ ๊ฒ ( ๋ฌธ์, ๊ทธ๋ฆผ, ๋ฐ์ดํฐ, ํด๋น ์ํํธ์จ์ด ์์ฒด ๋ฑ )
- ํํ : ๊ทธ ์์์ ํํํ๊ธฐ ์ํ ์ด๋ฆ ( DB์ ํ์ ์ ๋ณด๊ฐ ์์์ด๋ฉด, 'students'๋ฅผ ์์์ ํํ์ผ๋ก ์ ํจ )
- ์ํ ์ ๋ฌ : ๋ฐ์ดํฐ๊ฐ ์์ฒญ๋๋ ์์ ์ ์์์ ์ํ๋ฅผ ์ ๋ฌ. ( JSON ํน์ XML์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์ผ๋ฐ์ )
REST๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์น์ ๊ธฐ์กด ๊ธฐ์ ๊ณผ HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์, โญ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉโญํ ์ ์๋ ์ํคํ ์ฒ ์คํ์ผ์ด๋ค.
๐ก ๊ฐ๋
HTTP URI ๋ฅผ ํตํด ์์(Resource)์ ๋ช ์ํ๊ณ , HTTP Method(POST, GET, PUT, DELETE) ๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD Operation(Create, Read, Update, Delete)์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- REST๋ ์์ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ(ROA, Resource Oriented Architecture) ์ค๊ณ์ ์ค์ฌ์ Resource๊ฐ ์๊ณ HTTP Method๋ฅผ ํตํด Resource๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋์๋ค.
- ์น ์ฌ์ดํธ์ ์ด๋ฏธ์ง, ํ ์คํธ, DB ๋ด์ฉ ๋ฑ์ ๋ชจ๋ ์์์ ๊ณ ์ ํ ID์ธ HTTP URI๋ฅผ ๋ถ์ฌํ๋ค.
๐ก ๊ตฌ์ฑ ์์
1. ์์(Resource) - URI
- ๋ชจ๋ ์์์๋ ๊ณ ์ ํ ID๊ฐ ์กด์ฌํ๊ณ , ์ด ์์์ Server์ ์กด์ฌํ๋ค.
- ์์์ ๊ตฌ๋ณํ๋ ID๋ '/exgroups/:exgroup_id'์ ๊ฐ์ HTTP URI ์ด๋ค.
- Client๋ URI๋ฅผ ์ด์ฉํด ์์์ ์ง์ ํ๊ณ ํด๋น ์์์ ์ํ(์ ๋ณด)์ ๋ํ ์กฐ์์ Server์ ์์ฒญํ๋ค.
2. ํ์(Verb) - Method
- HTTP ํ๋กํ ์ฝ์ Method๋ฅผ ์ฌ์ฉํ๋ค.
- HTTP ํ๋กํ ์ฝ์ GET, POST, PUT, PATCH, DELETE์ Method๋ฅผ ์ ๊ณตํ๋ค. ( CRUD )
GET Read : ์ ๋ณด ์์ฒญ, URI๊ฐ ๊ฐ์ง ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด ์๋ฒ์ ์์ฒญํ๋ค. POST Create : ์ ๋ณด ์ ๋ ฅ, ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ๋ฌํ๋ ค๋ ์ ๋ณด๋ฅผ ๋ณด๋ธ๋ค. PUT Update : ์ ๋ณด ์ ๋ฐ์ดํธ, ์ฃผ๋ก ๋ด์ฉ์ ๊ฐฑ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. (๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ๋ฐ๊ฟ ๋) PATCH Update : ์ ๋ณด ์ ๋ฐ์ดํธ, ์ฃผ๋ก ๋ด์ฉ์ ๊ฐฑ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. (๋ฐ์ดํฐ ์ผ๋ถ๋ง ๋ฐ๊ฟ ๋) DELETE Delete : ์ ๋ณด ์ญ์ , (์์ ์ฑ ๋ฌธ์ ๋ก ๋๋ถ๋ถ ์๋ฒ์์ ๋นํ์ฑํํ๋ค.)
3. ํํ (Representation of Resource)
- Client์ Server๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํํ๋ก JSON, XML, TEXT, RSS ๋ฑ์ด ์๋ค.
- JSON, XML์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
๐ก ํน์ง
1. Server-Client (์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ)
- ์์์ด ์๋ ์ชฝ์ด Server, ์์์ ์์ฒญํ๋ ์ชฝ์ด Client๊ฐ ๋๋ค.
- REST Server๋ API๋ฅผ ์ ๊ณตํ๊ณ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ์ ์ฑ ์์ง๊ณ ,
- Client๋ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ context( ์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด ) ๋ฑ์ ์ง์ ๊ด๋ฆฌํ๊ณ ์ฑ ์์ง๋ค.
- ์ญํ ์ ํ์คํ ๊ตฌ๋ถ์ํด์ผ๋ก์จ ์๋ก ๊ฐ์ ์์กด์ฑ์ ์ค์ธ๋ค.
2. Stateless (๋ฌด์ํ)
- HTTP ํ๋กํ ์ฝ์ Stateless Protocol์ด๋ฏ๋ก REST ์ญ์ ๋ฌด์ํ์ฑ์ ๊ฐ๋๋ค.
- Client์ context๋ฅผ Server์ ์ ์ฅํ์ง ์๋๋ค.
- ์ฆ, ์ธ์ ๊ณผ ์ฟ ํค์ ๊ฐ์ context ์ ๋ณด๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ฏ๋ก ๊ตฌํ์ด ๋จ์ํด์ง๋ค.
- Server๋ ๊ฐ๊ฐ์ ์์ฒญ์ ์์ ํ ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ์ธ์ํ๊ณ ์ฒ๋ฆฌํ๋ค.
- ๊ฐ API ์๋ฒ๋ Client์ ์์ฒญ๋ง์ ๋จ์ ์ฒ๋ฆฌํ๋ค.
- ์ฆ, ์ด์ ์์ฒญ์ด ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌ์ ์ฐ๊ด๋์ด์๋ ์๋๋ค. ( DB์ ์ํด ๋ฐ๋๋ ๊ฒ์ ํ์ฉ )
- Server์ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ผ๊ด์ฑ์ ๋ถ์ฌํ๊ธฐ ๋๋ฌธ์ ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง๋ค.
3. Cacheable (์บ์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ)
- ์น ํ์ค HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉํ ์ ์๋ค.
- ์ฆ, HTTP๊ฐ ๊ฐ์ง ๊ฐ์ฅ ๊ฐ๋ ฅํ ํน์ง ์ค ํ๋์ธ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์๋ค.
- HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ Last-Modified Tag ๋๋ E-Tag๋ฅผ ์ด์ฉํด ์บ์ฑ์ ๊ตฌํํ๋ค.
- ๋๋์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
4. Layered System (๊ณ์ธต ๊ตฌ์กฐ)
- Client๋ REST API Server๋ง ํธ์ถํ๋ค.
- REST Server๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค.
- ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๋ฑ์ ์ํ ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
- Proxy, Gateway์ ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ํ์ง๋ง Client๋ Server์ ์ง์ ํต์ ํ๋์ง, ์ค๊ฐ ์๋ฒ์ ํต์ ํ๋์ง๋ ์ ์ ์๋ค.
5. Uniform Interface (์ธํฐํ์ด์ค ์ผ๊ด์ฑ)
- URI๋ก ์ง์ ํ Resource์ ๋ํ ์์ฒญ์ ํต์ผ๋๊ณ , ํ์ ์ ์ผ๋ก ์ํํ๋ ์ํคํ ์ฒ ์คํ์ผ์ ์๋ฏธํ๋ค.
- HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, Loosely Coupling(๋์จํ ๊ฒฐํจ) ํํ๋ฅผ ๊ฐ๋๋ค.
- ์ฆ, ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข ์๋์ง ์๋๋ค.
6. Self-Descriptiveness (์์ฒด ํํ)
- ์์ฒญ ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
๐ก ์ฅ๋จ์
์ฅ์
- HTTP ํ๋กํ ์ฝ์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก REST API ์ฌ์ฉ์ ์ํ ๋ณ๋์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ ํ์๊ฐ ์๋ค.
- HTTP ํ๋กํ ์ฝ์ ํ์ค์ ์ต๋ํ ํ์ฉํ์ฌ ์ฌ๋ฌ ์ถ๊ฐ์ ์ธ ์ฅ์ ์ ํจ๊ป ๊ฐ์ ธ๊ฐ ์ ์๊ฒ ํด์ค๋ค.
- HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- REST API ๋ฉ์์ง๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ๋ช ํํ๊ฒ ๋ํ๋ด๋ฏ๋ก ์๋ํ๋ ๋ฐ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ค.
๋จ์
- ํ์ค์ด ์กด์ฌํ์ง ์๋๋ค.
- ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๊ฐ 4๊ฐ์ง(HTTP Method) ๋ฟ์ด๋ค.
- ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ์์ง ์ ๋๋ก ์ง์ํด์ฃผ์ง ๋ชปํ๋ ๋ถ๋ถ(PUT, DELETE)์ด ์กด์ฌํ๋ค.
์ฐธ๊ณ ๋ธ๋ก๊ทธ :
https://velog.io/@seokkitdo/Network-REST%EB%9E%80-REST-API%EB%9E%80-RESTful%EC%9D%B4%EB%9E%80
https://dev-coco.tistory.com/97