REST API
ย REST ๋?
Representational State Transfer์ ์ฝ์๋ก, 2000๋
๋์ ๋ก์ด ํ๋ฉ(Roy Fielding)์ ์ํด ์น(HTTP) ์ค๊ณ์ ์ฐ์์ฑ์ ๋นํด ์ ๋๋ก ์ฌ์ฉ๋์ด์ง์ง ๋ชปํ๋ ๋ชจ์ต์ ์ํ๊น์ํ๋ฉฐ ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ
์ฒ๋ก์จ REST๋ฅผ ๋ฐํํ์๋ค.
์์์ ์ด๋ฆ(์์์ ํํ)์ผ๋ก ๊ตฌ๋ถํด ํด๋น ์์์ ์ํ(์ ๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ์์(resource)์ ํํ(representation)์ ์ํ ์ํ ์ ๋ฌ์ ๋ปํ๋ค.
ย REST์ ๊ตฌ์ฑ
ย ์์ (Resource) - URI
โข
๋ชจ๋ ์์์๋ ๊ณ ์ ํ ID๊ฐ ์กด์ฌํ๊ณ , ์ด ์์์ Server์ ์กด์ฌํ๋ค.
โข
์์์ ๊ตฌ๋ณํ๋ ID๋ โ/exgroups/:exgroup_idโ ์ ๊ฐ์ HTTP URI์ด๊ณ ,
โข
Client๋ URI๋ฅผ ์ด์ฉํด ์์์ ์ง์ ํ๊ณ ํด๋น ์์์ ์ํ(์ ๋ณด)์ ๋ํ ์กฐ์์ Server์ ์์ฒญํ๋ค.
ย ํ์ (Method) - HTTP Method
โข
HTTP Method๋ค์ ์ฌ์ฉํจ
ย ํํ (Representation)
โข
Client์ Server๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํํ๋ก JSON, XML, RSS ๋ฑ์ด ์๋ค.
โข
์ ์ผ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฑด JSON, XML
ย REST์ ํน์ง
1.
Server-Client (์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ)
โข
์์์ด ์๋ ์ชฝ์ด ์๋ฒ, ์์์ ์์ฒญํ๋ ์ชฝ์ด ํด๋ผ์ด์ธํธ
โฆ
REST ์๋ฒ๋ API๋ฅผ ์ ๊ณตํ๊ณ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ
โฆ
ํด๋ผ์ด์ธํธ๋ ์ฌ์ฉ์ ์ธ์ฆ, context(์ธ์
, ๋ก๊ทธ์ธ ์ ๋ณด)๋ฅผ ์ง์ ๊ด๋ฆฌ
โฆ
์ญํ ์ ํ์คํ ๊ตฌ๋ถํจ์ผ๋ก์จ ์๋ก ๊ฐ์ ์์กด์ฑ์ ์ค์
2.
Stateless (๋ฌด์ํ)
โข
HTTP ํ๋กํ ์ฝ์ Stateless ํ๋กํ ์ฝ์ด๋ฏ๋ก REST๋ ๋ฌด์ํ์ฑ์ ๊ฐ์ง
โฆ
๋ฌด์ํ์ฑ์ด๋? ์ํ์ ๋ณด(์ธ์
์ ๋ณด, ์ฟ ํค ์ ๋ณด)๋ฅผ ๋ณ๋๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์์
โข
ํด๋ผ์ด์ธํธ์ context๋ฅผ ์๋ฒ์ ์ ์ฅํ์ง ์์ โ ๊ตฌํ์ด ๋จ์ํด์ง
โข
์๋ฒ๋ ๊ฐ๊ฐ์ ์์ฒญ์ ์์ ํ ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ์ธ์ํ๊ณ ์ฒ๋ฆฌํจ
โฆ
๊ฐ API ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ๋ง์ ๋จ์ ์ฒ๋ฆฌํ๋ฏ๋ก ์๋ฒ์ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ผ๊ด์ฑ์ด ์๊ธฐ โ ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง
3.
Cachable (์บ์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ)
โข
์น ํ์ค HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก, ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉํ ์ ์์
โฆ
HTTP๊ฐ ๊ฐ์ง ํน์ง ์ค์ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ๊ณ ๊ตฌํํ ์ ์์
โข
๋๋์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์
4.
Layered-System(๊ณ์ธต ๊ตฌ์กฐ)
โข
REST ์๋ฒ๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์
โฆ
๋ณด์, ๋ก๋๋ฐธ๋ฐ์ฑ, ์ํธํ ๋ฑ์ ์ํ ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์
โฆ
Proxy, Gateway์ ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด ์ฌ์ฉ๊ฐ๋ฅ
5.
Uniform Interface (์ธํฐํ์ด์ค ์ผ๊ด์ฑ)
โข
URI๋ก ์ง์ ํ ์์์ ๋ํ ์์ฒญ์ ํต์ผ์ํค๊ณ , ํ์ ์ ์ผ๋ก ์ํํ๋ ์ํคํ
์ฒ ์คํ์ผ์ ์๋ฏธํจ
โข
HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ (ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข
์๋์ง ์์)
6.
Self-Descriptiveness (์์ฒด ํํ)
โข
์์ฒญ ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ์ด๋ค.
ย REST API ์ ์ ์
โข
REST์ ํน์ง์ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
ย REST API ์ ํน์ง
โข
REST API๋ ๊ฐ ์์ฒญ์ด ์ด๋ค ๋์์ด๋ ์ ๋ณด๋ฅผ ์ํ ๊ฒ์ธ์ง๋ฅผ ์์ฒญ์ ๋ชจ์ต ์์ฒด๋ก ์ถ๋ก ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
โฆ
ex. POSTโฆ/content โ ๊ฒ์๋ฌผ์ ์์ฑํ๋ ์์ฒญ์ด๊ตฌ๋?
ย REST API ๋์์ธ ๊ฐ์ด๋
1.
URI๋ ์ ๋ณด์ ์์์ ํํํด์ผ ํ๋ค.
2.
์์์ ๋ํ ํ์๋ HTTP Method (GET, POST, PUT, PATCH, DELETE)๋ก ํํํ๋ค.
ย REST API ์ค๊ณ ๊ท์น
โข
RESTful์ REST์ ์ค๊ณ ๊ท์น์ ์ ์ง์ผ์ ์ค๊ณ๋ API๋ฅผ RESTfulํ API๋ผ๊ณ ํ๋ค.
โข
REST์ ์๋ฆฌ๋ฅผ ์ ๋ฐ๋ฅด๋ ์์คํ
โ RESTful ํ๋ค.