RESTful API
RESTful API๋?
REpresentational State Transfer์ ์ฝ์ด๋ก์จ, HTTP๋ฅผ ํ์ฉํด์ ๋ฐ์ดํฐ์ ๋ํ ์ ๊ทผ, ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ API์ ์ํคํ ์ฒ ์คํ์ผ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์?
์ ํ๋ฆฌ์ผ์ด์ ๋ถ๋ฆฌ ๋ฐ ํตํฉ
์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด API์ ๋ง๋ค๊ธฐ ์ํด์
์ดํด๊ด๊ณ์ ์์ด์ ์ฝ์คํธ๋ฅผ ์ค์ด๊ธฐ ์ํด์
ํน์ง?
๋ค์ํ UI์ ์ฌ์ฉ : ์์์ ๋จ์ผ URL์ ํตํด์ ๊ณ ์ ํ๊ฒ ์๋ณํ ์ ์์ด์ผ ํ๋ฉฐ, HTTP์ ๊ฐ์ ๋คํธ์ํฌ ํ๋กํ ์ฝ์ ๊ธฐ๋ณธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ๋ง ์์์ ์กฐ์ํ ์ ์๋ค. ๋ํ HTTP ํ์ค์๋ง ๋ง๋๋ค๋ฉด ์ด๋ ํ ํ๋ซํผ์์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅ
ํด๋ผ์ด์ธํธ - ์๋ฒ ๊ธฐ๋ฐ : ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด๋ ๋ช ํํ๊ฒ ๊ตฌ๋ถ๋์ด์ผ ํ๋ค. UI, request ์์ง์ ๋ฌธ์ ๋ ํด๋ผ์ด์ธํธ์ ์์ญ์ด๊ณ , ๋ฐ์ดํฐ์ ์ ๊ทผ, ๋ณด์ ๋ฑ์ ์๋ฒ์ ์์ญ์ด๋ค. ์ด๋ ๊ฒ ๋์จํ๊ฒ ๊ฒฐํฉ๋์ด์ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ ๋์ด์ผ ํ๋ค.
stateless operations : ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์ํ๋ฅผ ์ ์งํ ์ ์์ด์ผ ํ๋ค. ํ์ํ ์ํ ๊ด๋ฆฌ๋ ํด๋ผ์ด์ธํธ์์ ์ํ๋์ด์ผ ํ๋ค.
RESTful ์์ ์บ์ฑ : ๋ชจ๋ ์์์ ๋ํด์ ์บ์๋ฅผ ํ์ฉํด ์ค์ผ ํ๋ค. ๊ทธ๋์ผ ์ํ๋ฅผ ์ ์งํ์ง ์๋๋ผ๋ ์ ์ฅํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
๋ธ๋ผ์ฐ์ ๋ ๋ชจ๋ GET ์์ฒญ์ ์บ์ ๊ฐ๋ฅํ๊ฒ ์ฒ๋ฆฌ
POST๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์บ์ ์ฒ๋ฆฌํ ์ ์์ง๋ง, http header์ ๋ช ์์, ๊ฐ๋ฅํ๋๋ก ์ฒ๋ฆฌ
PUT, DELETE๋ ์บ์ ์ฒ๋ฆฌ ๋ถ๊ฐ๋ฅ
Layered system : REST๋ ๋ค์์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ์๋ฒ๋ฅผ ํ์ฉํ๋ค.
code on demand : ๋๋ถ๋ถ ์๋ฒ๋ ์ ์ ์ธ ์์์ ๋ณด๋ด์ฃผ์ง๋ง, ํ์ํ ๊ฒฝ์ฐ์๋ ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์ ๋ฌํด์ฃผ๊ธฐ๋ ํ๋ค. ์ด ์๋ฏธ๋ ํด๋ผ์ด์ธํธ์์ ์คํ์ด ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์๋ฒ์์ ๋ณด๋ด์ค๋ค๋ ์๋ฏธ์ด๋ค.
๊ตฌ์ฑ์์?
resource : URL
method : HTTP Method
representation of resource : HTML, JSON, XML ๋ฑ
= URI์ ํตํด์ resource์ ํ์ํด์ฃผ๊ณ , HTTP Method์ ์ฌ์ฉํด์ resource์ method์ ์ ํด์ค๋ค. ํด๋ผ์ด์ธํธ๋ representation์ด ๊ฐ๋ฅํ ๋ชฉ๋ก์ ๋์ ธ์ฃผ๊ณ , ์๋ฒ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ ์ ํํ๋ค.
๊ท์น?
์๋ฌธ์๋ง์ ์ฌ์ฉํ๋ค(๋๋ฌธ์์ ํผ์ฉํ์ง ์๋๋ค)
์ธ๋๋ฐ( _ ) ๋์ ํ์ดํ( - )์ ์ฌ์ฉํ๋ค.
๋ง์ง๋ง์ ์ฌ๋์( / )์ ์ฌ์ฉํ์ง ์๋๋ค( / ์ ํตํด์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๊ธฐ ๋๋ฌธ์ด๋ค).
ํ์(get, post ๋ฑ)์ ํฌํจ์ํค์ง ์๋๋ค( ๊ทธ๋ฐ๊ฒ๋ค์ http method๋ก, ex - getUser ์ด๋ ๊ฒ x)
Create : POST
Read : GET
Update
PUT : ๋ชจ๋ ์์๋ค์ ๋ํ ๊ฐ๋ค์ ๋ฃ์ด์ค์ ๋ณด๋ด์ค์ผ ํ๋ค.
PATCH : ๋ณ๊ฒฝํ๊ณ ์ ํ๋ ์์๋ง ๋ฃ์ด์ค์ ๋ณด๋ด์ค์ผ ํ๋ค.
Deleter : DELETE
ํ์ผ ํ์ฅ์๋ ํฌํจ์ํค์ง ์๋๋ค(Accept header๋ฅผ ์ฌ์ฉํ์) - Accept header๋ request์ ๋ณด๋ผ ๋ ์๋ฒ์๊ฒ ์ด๋ฌํ ํ์ ์ผ๋ก ๋ณด๋ด๋ฌ๋ผ๊ณ ์์ฒญํ ๋ ์ฌ์ฉ
๊ฐ๊ธ์ ์ผ๋ก resource์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๋ค(๋์ฌ๋ ์ต๋ํ ํผํ์)
๋ด๊ฐ ๋ง๋ API๊ฐ RESTful ํ์ง ํ์ธ
์๋ํฌ์ธํธ๊ฐ ๋จ์ผ ์๋ ํฌ์ธํธ์ธ๊ฐ?
๋ชจ๋ request๊ฐ POST๋ฐฉ์์ธ๊ฐ?
URL์ resource์ ํ์(method)๊ฐ ์๋๊ฐ?
URL์ ๋ฉ์๋ ์ด๋ฆ์ด ํฌํจ๋์ด ์๋๊ฐ?
๋ค ํด๋นํ์ง ์๋๋ค๋ฉด RESTful ํ๋ค๊ณ ํ ์ ์๋ค.
์ฌ๋ด(?) : URI vs URL
๋ ๋ค Uniform Resource ์ด๊ณ , I๋ Identifier, L์ Locator๋ก ๋๋์ด์ง ์ ์๋ค.
๊ธฐ๋ณธ์ ์
URI์ ํตํฉ ์์ **์๋ณ์(ID)**๋ก ์ ์ผํ๊ฒ ๋ ๋ฆฝ์ ์ผ๋ก ์์์ ๋ํ๋ด๋ ์ง์์์ด๋ค.
URL์ URI์ ๋ฒ์ ๋ด์ ์๋ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
URL์ ์์์ ์์น, Path์ ์๋ฏธํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ดํธ ๋๋ฉ์ธ์ ์๋ฏธํ๋ค.
์์๋ก ๋ค๋ฉด
์ด๋ ๊ฒ ์์์ ์์น๋ฅผ ๋ํ๋ด๋ ๊ฒ์ URL์ด๋ผ๊ณ ํ ์ ์์ผ๋ฉฐ, URI ์ด๋ผ๊ณ ํ ์๋ ์๋ค.
๋ง์ฝ
์ด๋ฐ ๊ฒฝ์ฐ์๋ user๊น์ง๋ url์ด๋ผ๊ณ ํ ์ ์์ง๋ง, 132๊ฐ์ ๊ฒฝ์ฐ๋ ๊ทธ๋ฅ 132๋ฒ์งธ user๋ฅผ ๋ํ๋ด๋ ์๋ณ์์ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด๋ก๋ uri์ด๋ผ๊ณ ํ ์ ์๋ค.
Last updated
Was this helpful?