RESTful API
๋ด ๊ณต๋ถ๋ ๋ด๊ฐ ํ๋ค, ๋ด๊ณต๋ดํโฆ
์ ๋ฆฌ๋ ๋ด์ฉ์ โ์ธํ๋ฐ-Spring Cloud๋ก ๊ฐ๋ฐํ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ๋ฆฌ์ผ์ด์ (MSA)โ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
RESTful Web Service ๋จ๊ณ
LEVEL 0
ํ์ํ ๋ฆฌ์์ค๋ฅผ ์น ์๋น์ค๋ก ๊ฒฝ์ ํด ์ ๋ฌ๋ฐ๋ ์ต์ํ์ ๋ชฉ์ ๋ง ๋ฌ์ฑ. URL์ action์ ๋ฐ๋ก ๋ ธ์ถ์ํจ ํํ
ex)
LEVEL 1
ํ์ํ ๋ฆฌ์์ค๋ฅผ URL์ ์ ์ ํ๊ฒ ํ๊ธฐํจ. URL์ ํ์์ ์ฌ๋ฐ๋ฅด๋ HTTP Methods๋ฅผ ์ฌ์ฉํ๊ณ ์์ง ์์
ex)
LEVEL 2
๋ฆฌ์์ค๋ฅผ ํํํ๋ ์ ์ ํ URL ํ์, ๊ทธ๋ฆฌ๊ณ ์๋น์ค์ ํํ, ์์ ์ ์ฉ๋ ๋ฐ ์ข ๋ฅ์ ๋ง๋ ์ ์ ํ HTTP Methods๋ฅผ ์ฌ์ฉ ์ถ๊ฐ์ ์ผ๋ก ๋ฐํ ๊ฐ์ ์ฑ๊ณต/์คํจ ์ฌ๋ถ๋ฅผ ์๋ฌ์ฝ๋๋ก ๋ถ๊ธฐํ์ฌ ํํ
- Request ์ GET, POST, PUT, DELETE Methods ์ฌ์ฉ
- Response๋ 200, 400, 404, 500 ๋ฑ์ ์๋ฌ์ฝ๋๋ก ๋ถ๊ธฐ
LEVEL 3
LEVEL2 + HATEOAS ๋ฆฌ์์ค์ ํจ๊ป ๋ค์ ๋จ๊ณ์์ ์ด๋ค ์์ ์ ํ ์ ์๋์ง๋ฅผ ๋ฐํ(Data + Next Possibel Actions)
์๋ฅผ ๋ค์ด ํ์๊ฐ์ ์์ฒญ ์ฑ๊ณต์ ์ผ๋ก ๋ฐํํ ๊ฒฝ์ฐ ์ฌ๊ธฐ์ ๋ค์ ๋จ๊ณ์์ ์์ฒญํ ์ ์๋ ์์ ์ ํจ๊ป ๋ฐํ ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋ชจ๋ ํ์ธํ ํ์ ์์. ๋ฐ๋ก ๋ค์ ์์ฒญ ๊ฐ๋ฅํ URI ๊ฐ์ ์ ์ ์์.
RESTful Web Service ๊ฐ๋ฐ ์ ๊ณ ๋ ค ์ฌํญ
- Consumer First : ๊ฐ๋ฐ์๊ฐ ์๋ API๋ฅผ ์ฌ์ฉํ๋ ์๋น์(์ธ๋ถ ์์คํ , FE ๋ฑ) ์ ์ฅ์์ ๊ฐ๋จ ๋ช ๋ฃํ API ์ค๊ณ ํ์
- Make best use of HTTP : HTTP Method, ์์ฒญ/์๋ต ํ์ , ํค๋ ๊ฐ ๋ฑ์ ์ ํ์ฉํ ์ ์์ด์ผ ํจ
- Request Methods : ์์ ์ ์ข ๋ฅ์ ๋ฐ๋ผ GET, POST, PUT, DELETE๋ก ์ ์ ํ๊ฒ ๋ถ๊ธฐ ํ์
-
Response Status : ์ฒ๋ฆฌ ์ํ์ ๋ฐ๋ผ ์๋ต ์ฝ๋(200, 404, 400, 201, 401 ๋ฑ)๋ก ์๋ฏธ๋ฅผ ๋ด์ ์ ์์ด์ผ ํจ
- ๋ง์ฝ ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๊ฒฝ์ฐ ์๋ฒ ์์ ๋ฌธ์ ๊ฐ ์์ด ์์ ์ ์ฑ๊ณต์ ์ผ๋ก ์ํ๋ ๊ฒ์ด๋ฏ๋ก 500๋ฒ๋, 200๋ฒ๋ ๋ณด๋ค๋ 404(No Data)๋ฅผ ๋ฐํํ๋ ๋ฐฉ๋ฒ์ ์ฑํํ ์ ์์
- No secure info in URI : ๋ณด์๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ ๋ฐ๋ก ๋ ธ์ถ๋๋ URI์ ๋ด์ง ๋ง ๊ฒ. Spring Security๋ฑ์ ์ฌ์ฉํ์ฌ ํ ํฐ์ผ๋ก ์ ๋ฌ ๊ฐ๋ฅ.
-
Use plurals : ๋ฆฌ์์ค์ ๋ํด ๋ณต์ ํํ์ URI๊ฐ ๊ถ์ฅ๋จ
- /users
- /users/1
- Use nouns for resources : action์ ์๋ฏธํ๋ ๋์ฌ ํํ๋ณด๋ค๋ resource๋ฅผ ์๋ฏธํ๋ ๋ช ์ฌ ํํ๋ฅผ ์ธ ๊ฒ. URI๋ง์ผ๋ก ์ด๋ค ๋ฆฌ์์ค๋ฅผ ์ฐ๋์ง ์ ์ ์์
- Define a consistent approach : ์ผ๊ด๋ End Point๋ฅผ ์ฌ์ฉํ ๊ฒ(์ง์ ์ ์ ๋จ์ผํ). API Gateway ์ฌ์ฉํ์ฌ ์คํ ๊ฐ๋ฅ.