[Spring Boot] API์ REST API๊ฐ ๋ญ๊น? ์ฝ๊ฒ ์ค๋ช ํด์ค
API๋?
API๋ ๋งค๊ฐ์ฒด์.
๋คํธ์ํฌ์์ ํ๋ก๊ทธ๋จ ๊ฐ ์ํธ์์ฉ์ ์ํ ๋งค๊ฐ์ฒด!
์๋น์์ ์์์ ์ฃผ๋ฌธํ๋๊ฑธ๋ก ์์๋ฅผ ๋ค์ด๋ณด์๋ฉด,
์ฐ๋ฆฌ๊ฐ ์๋น์ ๊ฐ์ ์ฃผ๋ฌธํ ๋, ์ฃผ๋ฐฉ์ผ๋ก ์ง์ ๊ฐ์ ์๋ฆฌ์ฌํํ ๋ฌด์จ ์์ ๋ง๋ค์ด์ฃผ์ธ์~ ๋ผ๊ณ ์ํ์์์
๋ฉ๋ดํ ๋ณด๊ณ ๊ฑฐ๊ธฐ ๋์์๋๋๋ก ์ฃผ๋ฌธํจ!!!
๊ทธ๋ฆฌ๊ณ ์จ์ดํฐ๊ฐ ์ฃผ๋ฌธ์ ๋ฐ์ผ๋ฉด, ์ฃผ๋ฐฉ์ ๊ฐ์ @@์๋ฆฌ ๋ง๋ค์ด์ฃผ์ธ์~ ๋ผ๊ณ ํ๊ณ
์๋ฆฌ๊ฐ ๋ค ๋ผ๋ฉด ์จ์ดํฐ๊ฐ ์๋ํํ ์๋ฆฌ๋ฅผ ์ค.
์ฌ๊ธฐ์
์๋ = ํด๋ผ์ด์ธํธ
์๋ฆฌ์ฌ = ์๋ฒ
์จ์ดํฐ = API
๋ผ๊ณ ์๊ฐํ๋ฉด๋จ.
๊ทธ๋ฆฌ๊ณ ๋ฉ๋ดํ์ API ๋ช ์ธ์ (์ด๋ค์์ผ๋ก API๋ฅผ ๋ฐฉ์์ผ๋ก ํธ์ถํ๋ฉด๋๋์ง.. ๋งค๊ฐ๋ณ์ ๋ฉ ๋ฃ์ด์ผํ๋์ง..๋ฑ)๋ผ๊ณ ์๊ฐํ๋ฉด๋จ
๋ค์ ์ค์ ์ํฉ์์ ์์๋ฅผ ๋ค์๋ฉด,
์ฐ๋ฆฌ๊ฐ ์น์ฌ์ดํธ ๋ค์ด๋ฒ์ ์ ์ํ๋ ์ํฉ.
-> ํด๋ผ์ด์ธํธ๊ฐ url ์ฃผ์์ฐฝ์ ๋ค์ด๋ฒ.com์ ์ ๋ ฅ (๋ค์ด๋ฒ ํ๋ฉด ๋ณด์ฌ์ค~๋ผ๋ GET ์์ฒญ)
-> API๋ ์ด ์์ฒญ ๋ฐ์์ ์๋ฒ์ ์ ๋ฌ
-> ์๋ฒ๋ API๊ฐ ์ค ์์ฒญ์ ์ฒ๋ฆฌ, ๊ฒฐ๊ณผ๋ฌผ ๋ง๋ค์ด์ ๋ค์ API๋ก ์ ๋ฌ
-> API๊ฐ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ๋ธ๋ผ์ฐ์ ์ ๋ด๋ณด๋ด๊ณ , ์ฐ๋ฆฌ๊ฐ ๋ค์ด๋ฒ ๋ฉ์ธ ํ๋ฉด ๋ณผ ์ ์๋๊ฒ์.
๊ทธ๋ ๋ค๋ฉด REST API๋ ๋ญ๊น?
REST API๋ URL ์ค๊ณ ๋ฐฉ์์ ๋งํ๋๊ฑฐ์!
rest api์ ์ฅ์ ์ url๋ง ๋ณด๊ณ ๋ ๋ญ ํ๋ api์ธ์ง ์ ์ ์๋ค๋๊ฑฐ.
์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํด์ ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ์.
์ฌ๊ธฐ์ ์์? ํ์, ๊ฒ์๋ฌผ, ๋๊ธ ๋ฑ๋ฑ.. ์ ๋ถ ์์์ด๋ผ๊ณ ๋ถ๋ฆ.
๊ทธ๋ผ ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ๋ค๋๊ฑด?
์์๋ง๋ค ๊ณ ์ ํ url์ด ์์
์๋ฅผ ๋ค๋ฉด,
/members/1 -> ID๊ฐ 1์ธ ํ์
/posts/2 -> ID๊ฐ 2์ธ ๊ฒ์๋ฏ
์ด๋ฐ์์ผ๋ก ๋ํ๋ด๋๊ฑฐ์.
๊ทธ๋ฆฌ๊ณ ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค ๋ผ๋ ๋ป์,
REST API ์์๋ ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ HTTP ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์๋ฏธ๋ฅผ ๊ตฌ๋ถํจ
์๋ฅผ ๋ค๋ฉด,
1๋ฒ ํ์ ์ ๋ณด๋ฅผ ์กฐํํ ๋ : GET ๋ฉ์๋๋ฅผ ์ฐ๊ณ , url์ /members/1
1๋ฒ ํ์ ์ ๋ณด๋ฅผ ์ญ์ ํ ๋ : DELETE ๋ฉ์๋๋ฅผ ์ฐ๊ณ , url์ /members/1
์ด๋ฐ์์.
url๊ฐ์๋ฐ ๊ด์ฐฎ๋? ๊ด์ฐฎ์. ๋ฉ์๋๊ฐ ๋ฌ๋ผ์ ๊ตฌ๋ถ์ด ๋๋๊น.
๊ทธ๋ฆฌ๊ณ RESTful ํ๋ค. REST์ค๋ฝ์ง ์๋ค. ๋ผ๋ ๋ง์ด ์์.
์ด๊ฒ ๋จผ๋ป์ด๋๋ฉด,
RESTful ํ๋ค๋๊ฑด
์์ ์ด๋ฆ์ URL๋ก ํํํ๊ณ , ํ์๋ HTTP ๋ฉ์๋๋ก ํํํ๋๊ฑฐ์.
๊ทธ๋ผ ๋ฐ๋๋ก REST์ค๋ฝ์ง ์๋ค๋๊ฑด
URL์ ๋์ฌ๊ฐ ๋ค์ด๊ฐ ์๊ฑฐ๋, ์์ ์ค์ฌ์ด ์๋๋ผ ํ์ ์ค์ฌ์ธ ๊ฒฝ์ฐ์ ๊ทธ๋ ๊ฒ ๋งํจ.
์๋ฅผ ๋ค์ด
O : DELETE /posts/1 (HTTP ๋ฉ์๋๋ก ๋ญํ ๊ฑด์ง ํ์ ๋ํ๋ด๊ณ , url์ ์์์ด๋ฆ)
X : GET /deletePosts/1 (ํ์ ์ค์ฌ์ด๋ผ REST ์ค๋ฝ์ง ์์)
--> ์๋ฌดํผ ๊ฒฐ๋ก ์ REST API๋ "์์ ์ค์ฌ"์ URL ์ค๊ณํ๊ณ , ๊ทธ ์์์ด ๋ญ ์ผ์ ํ ๊ฑด์ง ํ์๋ HTTP๋ฉ์๋๋ก ํํํ๋ฉด๋จ!!