REST
REST API
์์์ ์ด๋ฆ(์์์ ํํ)์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ(์ ๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํ๋ค. -> ์์(resource)์ ํํ(representation) ์ ์ํ ์ํ ์ ๋ฌ
REST(Representational State Transfer)๋ ์๋ ์์ด๋ ์น(www)๊ณผ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ ์ ์ํ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ํคํ ์ฒ์ ํ ํ์.
-
HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์ ์น์ ์ฅ์ ์ ํ์ฉํ ์ ์๋ ์ํคํ ์ณ ์คํ์ผ์ด๋ค.
-
REST๋ ๋คํธ์ํฌ ์์์ Client์ Server ์ฌ์ด์ ํต์ ๋ฐฉ์ ์ค ํ๋์ด๋ค.
์์, ์กฐ์, ํํ
์์(Resource)
-
์๋ฒ์ ์๋ ๊ฒ. DB ์์ ๋ค์ด๊ฐ ์๋ ๋ฐ์ดํฐ ๋๋ ์ด๋ฏธ์ง ํ๋ํ๋๋ฅผ ์๋ฏธํ๋ค. ex) ์ ์ , ์ฃผ๋ฌธ, ์ด๋ฏธ์ง์ฃผ์ ๋ฑ
-
URI๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ , ๊ตฌ๋ถํ ์ ์๋ค.
์กฐ์(Verb; ํ์)
- ํด๋ผ์ด์ธํธ๋ HTTP Method๋ฅผ ์ด์ฉํ์ฌ ์ง์ ํ ์์์ ๋ํ ์กฐ์์ ์์ฒญํ๋ค.
ํํ(Representation of Resource)
-
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์์์ ๋ํ ์กฐ์์ ์์ฒญํ๋ฉด ์๋ฒ๋ ์ด์ ๋ํ ์ ์ ํ ์๋ต์ ๋ณด๋ธ๋ค.
-
REST์์ ํ๋์ ์์์ JSON, XML ๋ฑ ์ฌ๋ฌ ํํ์ Representation์ผ๋ก ๋ํ๋ด์ด ์ง ์ ์๋ค.
-
Server-Client(์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ)
- REST Server: API๋ฅผ ์ ๊ณตํ๊ณ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ์ ์ฑ ์์ง๋ค.
- Client: ์ฌ์ฉ์ ์ธ์ฆ์ด๋ context(์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด) ๋ฑ์ ์ง์ ๊ด๋ฆฌํ๊ณ ์ฑ ์์ง๋ค.
- ์๋ก ๊ฐ ์์กด์ฑ์ด ์ค์ด๋ ๋ค.
-
Stateless(๋ฌด์ํ)
- Client์ context๋ฅผ Server์ ์ ์ฅํ์ง ์๋๋ค. -> ์ธ์ ๊ณผ ์ฟ ํค์ ๊ฐ์ context ์ ๋ณด๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ฏ๋ก ๊ตฌํ์ด ๋จ์ํด์ง๋ค.
- Server๋ ๊ฐ๊ฐ์ ์์ฒญ์ ์์ ํ ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ์ธ์ํ๊ณ ์ฒ๋ฆฌํ๋ค. -> ๊ฐ API ์๋ฒ๋ Client์ ์์ฒญ๋ง์ ๋จ์ ์ฒ๋ฆฌํ๋ค. ์ด์ ์์ฒญ์ด ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌ์ ์ฐ๊ด๋์ด์๋ ์๋๋ค.
-
Cacheable(์บ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ)
- ์บ์ ์ฌ์ฉ์ ํตํด ์๋ต์๊ฐ์ด ๋นจ๋ผ์ง๊ณ REST Server ํธ๋์ญ์ ์ด ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์๋ต์๊ฐ, ์ฑ๋ฅ, ์๋ฒ์ ์์ ์ด์ฉ๋ฅ ์ ํฅ์์ํฌ ์ ์๋ค.
- HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ LAST-Modified ํ๊ทธ๋ E-Tag๋ฅผ ์ด์ฉํด ์บ์ฑ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
-
Layered System(๊ณ์ธตํ)
- Client๋ REST API Server๋ง ํธ์ถํ๋ค.
- REST Server๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ, ๋ณด์๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต์ ์ถ๊ฐํด ๊ตฌ์กฐ์์ ์ ์ฐ์ฑ์ ๋ ์ ์๊ณ PROXY, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
- ํด๋ผ์ด์ธํธ ์ ์ฅ์์๋ ๋ฐ๋ก ๋๋จ์ ์๋ฒ์ ์ฐ๊ฒฐ๋์ด ์๋์ง, ์ค๊ฐ์ ํ๋ก์๋ ๋ก๋ ๋ฐธ๋ฐ์์ ์ฐ๊ฒฐ๋์ด ์๋ํ๋์ง ์ ์ ์์ต๋๋ค. ๋ณด์์ ์ํด ์ฌ๋ฌ ๊ฒน์ ์๋ฒ๋ ํต์ ์ด ์์ ์ ์๊ณ , ์๋ฒ๋ ์๋ต์ ์ฃผ๊ธฐ ์ํด ๋ค๋ฅธ ์๋ฒ์ ํต์ ํ ์๋ ์์ง๋ง ํด๋ผ์ด์ธํธ ์ ์ฅ์์ ์ฒ ์ ํ๊ฒ ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ง์ ์ ์ผ๋ก ๋ฐ๋ก ์ฐ๊ฒฐ๋ ์ชฝ๊ณผ์ ์ฐ๊ฒฐ๋ง ์ ๊ฒฝ ์จ์ฃผ๋ฉด ๋ฉ๋๋ค.
-
Uniform Interface(์ธํฐํ์ด์ค ์ผ๊ด์ฑ)
- HTTP ํ์ค์๋ง ๋ฐ๋ฅธ๋ค๋ฉด, ์ด๋ค ํ๋ซํผ์ด๋ ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ ๋ชจ๋ ํ๋ซํผ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, URI๋ก ์ง์ ํ ๋ฆฌ์์ค์ ๋ํ ์กฐ์์ด ๊ฐ๋ฅํ๋ค.
- URI๋ก ์ง์ ํ ๋ฆฌ์์ค๋ฅผ Http Method๋ฅผ ํตํด์ ํํํ๊ณ ๊ตฌ๋ถํ๋ค.
- Self-Descriptiveness(์์ฒดํํ ๊ตฌ์กฐ)
- REST API ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ด๋ฅผ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
- HATEOAS(Hypermedia As The Engine Of Application State)
- ๋งํฌ์ ์ฌ์ฉ ๊ฐ๋ฅํ URL์ ๋ฆฌ์์ค๋ก ์ ๋ฌํ์ฌ client๊ฐ ์ฐธ๊ณ ํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ
- RESTful API๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ ์ผ๋ก ์๋ฒ์ ์ํด ๋์ ์ผ๋ก ์ํธ์์ฉ์ ํ ์ ์๋ค. ์ฝ๊ฒ ๋งํ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ์๋ฒ๋ ์์ฒญ์ ์์กด๋๋ URI๋ฅผ Response์ ํฌํจ์์ผ ๋ฐํํ๋ค.
- ๋์ ์ธ API๋ฅผ ์ ๊ณตํ ์ ์๊ฒ๋ฉ๋๋ค.(๋ชจ๋ ๊ด๋ จ๋ ๋์์ URI๋ฅผ ํตํด ์๋ ค์ค๋๋ค.) ์ฆ, ํด๋ผ์ด์ธํธ๊ฐ API์ ๋ณํ์ ์ผ์ผ์ด ๋์ํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ ๊ฐ์ ธ์จ๋ค.
- Hypermedia (๋งํฌ)๋ฅผ ํตํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ ์ด๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ค. (Hypermedia (๋งํฌ)์ ์๊ธฐ ์์ ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์ผ ํ๋ค.)
- ํด๋ผ์ด์ธํธ๋ฅผ ๊ฐ๋ฐํ๋ ์ฌ๋๋ค์ด ํน์ ๋ฉ์๋๋ก๋ถํฐ ์ฌ ์ ์๋ ๊ฒฐ๊ณผ ๋์์ ๋ํด ์์ธกํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๊ณ , API๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ ํค๊ฐ ๋ฐ๋์ง ์๋ ํ URI๋ก ์ฃผ์ด์ง ๋งํฌ(link)๋ง ์ ์งํ๋ฉด ๋๋ฏ๋ก ๋ณ๋์ ๋์์ด ์๊ตฌ๋์ง ์๊ฒ ๋๋ค.
-
Code-On-Demand
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์คํ ๊ฐ๋ฅํ ์ํํธ์จ์ด๋ฅผ ์ ๋ฌํฉ๋๋ค.
- Client์ ๋ณด๋ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๋ณด๋ด์ ์ด๊ฒ์ Client์์ ์คํํ๋ ๊ฒ์ ๋งํ๋ค.
- optional
์ฅ์
-
HTTP ํ๋กํ ์ฝ์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก REST API ์ฌ์ฉ์ ์ํ ๋ณ๋์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ ํ์๊ฐ ์๋ค.
-
HTTP ํ๋กํ ์ฝ์ ํ์ค์ ์ต๋ํ ํ์ฉํ์ฌ ์ฌ๋ฌ ์ถ๊ฐ์ ์ธ ์ฅ์ ์ ํจ๊ป ๊ฐ์ ธ๊ฐ ์ ์๊ฒ ํด์ค๋ค.
-
HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
-
REST API ๋ฉ์์ง๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ๋ช ํํ๊ฒ ๋ํ๋ด๋ฏ๋ก ์๋ํ๋ ๋ฐ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
-
์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ค.
๋จ์
-
ํ์ค์ด ์กด์ฌํ์ง ์๋๋ค. -> ๊ด๋ฆฌ๊ฐ ์ฝ์ง ์๋ค.
-
HTTP Method ํํ๊ฐ ์ ํ์ ์ด๋ค. -> ๋จ์ํ ๋ณด๋ด๋ ๊ธฐ๋ฅ ์ธ์๋ ๋ค์ํ ์ธ๋ถ ๊ธฐ๋ฅ๋ค์ ๊ตฌํํ๋๋ฐ ์ ์ฝ์ด ๋ฐ์ํ ์ ์๋ค.
-
๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ํ ์คํธํ ์ผ์ด ๋ง์ ์๋น์ค๋ผ๋ฉด ์ฝ๊ฒ ๊ณ ์น ์ ์๋ URL๋ณด๋ค Header ๊ฐ์ ์ฒ๋ฆฌํด์ผํ๋ฏ๋ก ์ ๋ฌธ์ฑ์ด ์๊ตฌ๋๋ค.
REST๊ฐ ํ์ํ ์ด์
- ์ ํ๋ฆฌ์ผ์ด์
๋ถ๋ฆฌ ๋ฐ ํตํฉ
- ๊ฑฐ๋ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋, ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฆฌํ๊ธฐ ์ฌ์์ก๋ค. RESTful API๋ฅผ ์๋น์คํ๊ธฐ๋ง ํ๋ฉด ์ด๋ค ๋ค๋ฅธ ๋ชจ๋ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ด๋ผ๋ RESTful API๋ฅผ ํตํด ์ํธ๊ฐ์ ํต์ ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ค์ํ ํด๋ผ์ด์ธํธ์ ๋ฑ์ฅ
- ์น ํ์ด์ง๋ฅผ ์ํ HTML ๋ฐ ์ด๋ฏธ์ง๋ฑ์ ๋ณด๋ด๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ์ด์ ๋ ๋ฐ์ดํฐ๋ง ๋ณด๋ด๋ฉด ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก html๊ฐ์ ํ์ผ์ ๋ณด๋ด๋ ๊ฒ์ ๋ฌด๊ฒ๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ชจ๋ ์ฑ์ ์๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ์๋ง์ง ์์๋๋ฐ RESTful API๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฐ์ดํฐ๋ง ์ฃผ๊ณ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ์์ ๋กญ๊ณ ๋ถ๋ด์์ด ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์ ์๋ค. ์๋ฒ๋ ์์ฒญํ ๋ฐ์ดํฐ๋ง ๊น๋ํ๊ฒ ๋ณด๋ด์ฃผ๋ฉด๋๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฒผ์์ง๊ณ ์ ์ง๋ณด์์ฑ๋ ์ข์์ก๋ค.
-
REST API์ ์ ์
- REST ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
-
REST API์ ํน์ง
- ์ฌ๋ด ์์คํ ๋ค๋ REST ๊ธฐ๋ฐ์ผ๋ก ์์คํ ์ ๋ถ์ฐํด ํ์ฅ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ ์ ์ง๋ณด์ ๋ฐ ์ด์ฉ์ ํธ๋ฆฌํ๊ฒ ํ ์ ์๋ค.
- REST๋ HTTP ํ์ค์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ๋ฏ๋ก, HTTP๋ฅผ ์ง์ํ๋ ํ๋ก๊ทธ๋จ ์ธ์ด๋ก ํด๋ผ์ด์ธํธ, ์๋ฒ๋ฅผ ๊ตฌํํ ์ ์๋ค.
- ์ฆ, REST API๋ฅผ ์ ์ํ๋ฉด ๋ธํ์ด ํด๋ผ์ด์ธํธ ๋ฟ ์๋๋ผ, ์๋ฐ, C#, ์น ๋ฑ์ ์ด์ฉํด ํด๋ผ์ด์ธํธ๋ฅผ ์ ์ํ ์ ์๋ค.
-
REST API ์ค๊ณ ๊ธฐ๋ณธ ๊ท์น
- URI๋ ์ ๋ณด์ ์์์ ํํํด์ผ ํ๋ค.
- resource๋ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ค.
- resource๋ ์์ด ์๋ฌธ์ ๋ณต์ํ์ ์ฌ์ฉํ์ฌ ํํํ๋ค.
- Ex)
GET /Member/1
->GET /members/1
- ์์์ ๋ํ ํ์๋ HTTP Method(GET, PUT, POST, DELETE ๋ฑ)๋ก ํํํ๋ค.
- URI์ HTTP Method๊ฐ ๋ค์ด๊ฐ๋ฉด ์๋๋ค.
- Ex)
GET /members/delete/1
->DELETE /members/1
- URI์ ํ์์ ๋ํ ๋์ฌ ํํ์ด ๋ค์ด๊ฐ๋ฉด ์๋๋ค.
- Ex)
GET /members/show/1
->GET /members/1
- Ex)
GET /members/insert/2
->POST /members/2
- URI๋ ์ ๋ณด์ ์์์ ํํํด์ผ ํ๋ค.
-
REST API ์ค๊ณ ๊ท์น
- ์ฌ๋์ ๊ตฌ๋ถ์(/ )๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉํ๋ค.
- Ex)
http://restapi.example.com/houses/apartments
- Ex)
- URI ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์(/ )๋ฅผ ํฌํจํ์ง ์๋๋ค.
- URI์ ํฌํจ๋๋ ๋ชจ๋ ๊ธ์๋ ๋ฆฌ์์ค์ ์ ์ผํ ์๋ณ์๋ก ์ฌ์ฉ๋์ด์ผ ํ๋ฉฐ URI๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋ฆฌ์์ค๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ด๊ณ , ์ญ์ผ๋ก ๋ฆฌ์์ค๊ฐ ๋ค๋ฅด๋ฉด URI๋ ๋ฌ๋ผ์ ธ์ผ ํ๋ค.
- REST API๋ ๋ถ๋ช ํ URI๋ฅผ ๋ง๋ค์ด ํต์ ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํผ๋์ ์ฃผ์ง ์๋๋ก URI ๊ฒฝ๋ก์ ๋ง์ง๋ง์๋ ์ฌ๋์(/)๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
- Ex)
http://restapi.example.com/houses/apartments/ (X)
- ํ์ดํ(- )์ URI ๊ฐ๋
์ฑ์ ๋์ด๋๋ฐ ์ฌ์ฉ
- ๋ถ๊ฐํผํ๊ฒ ๊ธด URI๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ํ์ดํ์ ์ฌ์ฉํด ๊ฐ๋ ์ฑ์ ๋์ธ๋ค.
- ๋ฐ์ค(_ )์ URI์ ์ฌ์ฉํ์ง ์๋๋ค.
- ๋ฐ์ค์ ๋ณด๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ฐ์ค ๋๋ฌธ์ ๋ฌธ์๊ฐ ๊ฐ๋ ค์ง๊ธฐ๋ ํ๋ฏ๋ก ๊ฐ๋ ์ฑ์ ์ํด ๋ฐ์ค์ ์ฌ์ฉํ์ง ์๋๋ค.
- URI ๊ฒฝ๋ก์๋ ์๋ฌธ์๊ฐ ์ ํฉํ๋ค.
- URI ๊ฒฝ๋ก์ ๋๋ฌธ์ ์ฌ์ฉ์ ํผํ๋๋ก ํ๋ค.
- RFC 3986(URI ๋ฌธ๋ฒ ํ์)์ URI ์คํค๋ง์ ํธ์คํธ๋ฅผ ์ ์ธํ๊ณ ๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ๋๋ก ๊ท์ ํ๊ธฐ ๋๋ฌธ
- ํ์ผํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค.
- REST API์์๋ ๋ฉ์์ง ๋ฐ๋ ๋ด์ฉ์ ํฌ๋งท์ ๋ํ๋ด๊ธฐ ์ํ ํ์ผ ํ์ฅ์๋ฅผ URI ์์ ํฌํจ์ํค์ง ์๋๋ค.
- Accept header๋ฅผ ์ฌ์ฉํ๋ค.
- Ex)
http://restapi.example.com/members/soccer/345/photo.jpg (X)
- Ex)
GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg (O)
- ๋ฆฌ์์ค ๊ฐ์๋ ์ฐ๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ
- /๋ฆฌ์์ค๋ช /๋ฆฌ์์ค ID/๊ด๊ณ๊ฐ ์๋ ๋ค๋ฅธ ๋ฆฌ์์ค๋ช
- Ex)
GET : /users/{userid}/devices (์ผ๋ฐ์ ์ผ๋ก ์์ โhasโ์ ๊ด๊ณ๋ฅผ ํํํ ๋)
- :id๋ ํ๋์ ํน์ resource๋ฅผ ๋ํ๋ด๋ ๊ณ ์ ๊ฐ
- Ex) student๋ฅผ ์์ฑํ๋ route: POST /students
- Ex) id=12์ธ student๋ฅผ ์ญ์ ํ๋ route: DELETE /students/12
- ์ฌ๋์ ๊ตฌ๋ถ์(/ )๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉํ๋ค.
-
RESTful
- RESTful์ ๊ฐ๋
- RESTful์ ์ผ๋ฐ์ ์ผ๋ก REST๋ผ๋ ์ํคํ
์ฒ๋ฅผ ๊ตฌํํ๋ ์น ์๋น์ค๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ฉ์ด์ด๋ค.
- ์ฆ, REST ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์คํ ์ RESTful์ด๋ ์ฉ์ด๋ก ์ง์นญ๋๋ค.
- RESTful์ REST๋ฅผ REST๋ต๊ฒ ์ฐ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก, ๋๊ตฐ๊ฐ๊ฐ ๊ณต์์ ์ผ๋ก ๋ฐํํ ๊ฒ์ด ์๋๋ค.
- RESTful์ ์ผ๋ฐ์ ์ผ๋ก REST๋ผ๋ ์ํคํ
์ฒ๋ฅผ ๊ตฌํํ๋ ์น ์๋น์ค๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ฉ์ด์ด๋ค.
- RESTful์ ๋ชฉ์
- ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด REST API๋ฅผ ๋ง๋๋ ๊ฒ
- RESTful API๋ฅผ ๊ตฌํํ๋ ๊ทผ๋ณธ์ ์ธ ๋ชฉ์ ์ด ํผํฌ๋จผ์ค ํฅ์์ ์๋๊ฒ ์๋๋ผ, ์ผ๊ด์ ์ธ ์ปจ๋ฒค์ ์ ํตํ API์ ์ดํด๋ ๋ฐ ํธํ์ฑ์ ๋์ด๋๊ฒ ์ฃผ ๋๊ธฐ์ด๋, ํผํฌ๋จผ์ค๊ฐ ์ค์ํ ์ํฉ์์๋ ๊ตณ์ด RESTful API๋ฅผ ๊ตฌํํ์ค ํ์๋ ์์ต๋๋ค.
- RESTful ํ์ง ๋ชปํ ๊ฒฝ์ฐ
- Ex1) CRUD ๊ธฐ๋ฅ์ ๋ชจ๋ POST๋ก๋ง ์ฒ๋ฆฌํ๋ API
- Ex2) route์ resource, id ์ธ์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ(/students/updateName)
- RESTful์ ๊ฐ๋
- REST์ ํน์ง์ ๋ํด์ ์ค๋ช ํ์์ค.
- REST๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํด์ ์ค๋ช ํ์์ค.
- RESTfulํ๊ฒ API๋ฅผ ๋์์ธํ๋ค๋ ๊ฒ์ ๋ฌด์์ธ์ง ์ค๋ช ํ์์ค.