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 ํ์ง ํ์ธ
์ฐธ๊ณ https://dzone.com/articles/five-clues-your-api-isnt
์๋ํฌ์ธํธ๊ฐ ๋จ์ผ ์๋ ํฌ์ธํธ์ธ๊ฐ?
๋ชจ๋ request๊ฐ POST๋ฐฉ์์ธ๊ฐ?
URL์ resource์ ํ์(method)๊ฐ ์๋๊ฐ?
http://localhost:8080/item/23/disactive โ X
URL์ ๋ฉ์๋ ์ด๋ฆ์ด ํฌํจ๋์ด ์๋๊ฐ?
๋ค ํด๋นํ์ง ์๋๋ค๋ฉด RESTful ํ๋ค๊ณ ํ ์ ์๋ค.
์ฌ๋ด(?) : URI vs URL
๋ ๋ค Uniform Resource ์ด๊ณ , I๋ Identifier, L์ Locator๋ก ๋๋์ด์ง ์ ์๋ค.
๊ธฐ๋ณธ์ ์
URI์ ํตํฉ ์์ **์๋ณ์(ID)**๋ก ์ ์ผํ๊ฒ ๋ ๋ฆฝ์ ์ผ๋ก ์์์ ๋ํ๋ด๋ ์ง์์์ด๋ค.
URL์ URI์ ๋ฒ์ ๋ด์ ์๋ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
URL์ ์์์ ์์น, Path์ ์๋ฏธํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ดํธ ๋๋ฉ์ธ์ ์๋ฏธํ๋ค.
์์๋ก ๋ค๋ฉด
https://localhost:8080/index.html
์ด๋ ๊ฒ ์์์ ์์น๋ฅผ ๋ํ๋ด๋ ๊ฒ์ URL์ด๋ผ๊ณ ํ ์ ์์ผ๋ฉฐ, URI ์ด๋ผ๊ณ ํ ์๋ ์๋ค.
๋ง์ฝ
https://localhost:8080/user/132
์ด๋ฐ ๊ฒฝ์ฐ์๋ user๊น์ง๋ url์ด๋ผ๊ณ ํ ์ ์์ง๋ง, 132๊ฐ์ ๊ฒฝ์ฐ๋ ๊ทธ๋ฅ 132๋ฒ์งธ user๋ฅผ ๋ํ๋ด๋ ์๋ณ์์ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด๋ก๋ uri์ด๋ผ๊ณ ํ ์ ์๋ค.
Last updated
Was this helpful?