REST์ ๊ฐ๋ ์ ์ดํดํ๋ค๋ฉด ์ด์ REST API์ ๋์์ธ์ ์ดํด๋ณด๊ณ ์ ํ๋ค.
REST API Design Guide
1) URL์ Resource๋ฅผ ํํํด์ผ ํ๋ค.
GET /members/1
Resource๋ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํ๊ณ ๋๋ฌธ์๋ณด๋ค๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ ํํํด์ผ ํ๊ณ , document(๋ํ๋จผํธ) ์ด๋ฆ์ผ๋ก๋ ๋จ์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. collection๊ณผ store์ ๋ช ์ ๋ณต์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
2) Resource์ ๋ํ ํ์๋ Http Method (GET, POST, PUT, DELETE)๋ก ํํํ๋ค.
์ด๋, URL์ Http Method๊ฐ ๋ค์ด๊ฐ๋ฉด ์ ๋๋ค. ๋ํ URL ํ์์ ๋ํ ๋์ฌ ํํ์ด ๋ค์ด๊ฐ๋ฉด ์ ๋๋ค. CRUD ๊ธฐ๋ฅ์ ๋ํ๋ด๋ ๊ฒ์ URL์ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
๐ ์๋ชป๋ ์
GET /books/show/1
๐ ์์ ํ
GET /books/1
2) ID๋ ํ๋์ ํน์ Resource๋ฅผ ๋ํ๋ด๋ ๊ณ ์ ๊ฐ์ด์ด์ผ ํ๋ค.
๐book์ ์์ฑํ๋ URL ์ POST /students ์ด๋ค. id๊ฐ 10์ธ book์ ์ญ์ ํ๋ URL์?
DELETE /students/10
3) ์ฌ๋์ ๊ตฌ๋ถ์๋ ๊ณ์ธต๊ด๊ณ์ด๋ฉฐ, URL ๋ง์ง๋ง ๋ฌธ์์ ์ฌ๋์(/)๋ฅผ ํฌํจํ์ง ์๋๋ค.
https://printf-hellojudyworld.tistory.com/ โ
4) Resource ๊ฐ์ ์ฐ๊ฐ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํํํ๋ค.
๐ ์์ 'has' ๊ด๊ณ๋ฅผ ํํํ ๋
GET /book/{bookid}/viewers
Http Methods
1) GET : Resource๋ฅผ ๋ฐ์์ฌ ๋
์์์ ์ํ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ธฐ ๋๋ฌธ์ safe method๋ผ๊ณ ๋ถ๋ฆฐ๋ค. ๋ง์ฝ POST, PUT์ ํตํด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ฉด ๋์ผํ API๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ์ถ ์์๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
2) POST : ์๋ก์ด Resource๋ฅผ ์ถ๊ฐํ ๋
์๋ฒ์ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํฌ ๋ ์ฌ์ฉํ๋ฉฐ ์๋ต์ฝ๋๋ก 201๋ฅผ ๋ฐ์์ผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์์์ ํ์ธํ๋ค.
3) PUT : ์กด์ฌํ๋ Resource๋ฅผ ๋ณ๊ฒฝํ ๋
Resource๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ API๋ ์๋ก์ด Resource๋ฅผ ์์ฑํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ ์๋ต์ฝ๋ ์ญ์ 201(Created)์ ๋ฐ์ผ๋ฉฐ ์กด์ฌํ๋ ์์์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ 200(Ok) ์ด๋ 204(No Content)๋ฅผ ๋ฐ๋๋ค.
๐ POST๋ ์ฌ๋ฌ ๊ฐ์ ์์์ ์ํ๋๋ ๋ฐ๋ฉด PUT์ ๋จ์ผ ์์์๋ง ์ํ๋๋ค๋ ์ฐจ์ด์ ์ด ์๋ค.
4) DELETE : Resource๋ฅผ ์ญ์ ํ ๋
DELETE ๋ฉ์๋๋ฅผ ์์ฒญํ๋ฉด ์์์ ์ญ์ ํ๊ฒ ๋๋๋ฐ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถํ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์ง ์๋๋ค. ์ด๋ฏธ ์ ๊ฑฐ๊ฐ ์๋ฃ๋์๋ค๋ ์ํ์ฝ๋ 404(NOT FOUND)๋ฅผ ๋ฐ๋๋ค.
5) PATCH : Resource ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ๋ณ๊ฒฝํ ๋
PUT๊ณผ ๋์ผํ๊ฒ Resource๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ฐ PUT์ ๊ฒฝ์ฐ์๋ ์์ ํ ์์์ ๋์ฒดํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ฉฐ PATCH๋ ๋ถ๋ถ์ ๋ณ๊ฒฝํ ๋ ์ฌ์ฉํ๋ค. ๋จ, ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ, ์ฑ ์ ํ๋ฆฌ์ผ์ด์ FW์์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋ ์ฌ์ฉํ ์ ์๋ ๋จผ์ ํ์ธํด์ผ ํ๋ค.