REST ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
์ต๊ทผ OpenAPI(๋๊ตฌ๋ ์ฌ์ฉํ ์ ์๋๋ก ๊ณต๊ฐ๋ API: ๊ตฌ๊ธ ๋งต, ๊ณต๊ณต ๋ฐ์ดํฐ ๋ฑ), ๋ง์ดํฌ๋ก ์๋น์ค(ํ๋์ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๊ฐ์ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ชผ๊ฐ์ด ๋ณ๊ฒฝ๊ณผ ์กฐํฉ์ด ๊ฐ๋ฅํ๋๋ก ๋ง๋ ์ํคํ ์ฒ) ๋ฑ์ ์ ๊ณตํ๋ ์ ์ฒด ๋๋ถ๋ถ์ REST API๋ฅผ ์ ๊ณตํ๋ค.
์ฌ๋ด ์์คํ ๋ค๋ REST ๊ธฐ๋ฐ์ผ๋ก ์์คํ ์ ๋ถ์ฐํด ํ์ฅ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ ์ ์ง๋ณด์ ๋ฐ ์ด์ฉ์ ํธ๋ฆฌํ๊ฒ ํ ์ ์๋ค.
REST๋ HTTP ํ์ค์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ๋ฏ๋ก, HTTP๋ฅผ ์ง์ํ๋ ํ๋ก๊ทธ๋จ ์ธ์ด๋ก ํด๋ผ์ด์ธํธ, ์๋ฒ๋ฅผ ๊ตฌํํ ์ ์๋ค.
์ฆ, REST API๋ฅผ ์ ์ํ๋ฉด ๋ธํ์ด ํด๋ผ์ด์ธํธ ๋ฟ ์๋๋ผ, ์๋ฐ, C#, ์น ๋ฑ์ ์ด์ฉํด ํด๋ผ์ด์ธํธ๋ฅผ ์ ์ํ ์ ์๋ค.
์ฐธ๊ณ ๋ฆฌ์์ค ์ํ
- ๋ํ๋จผํธ : ๊ฐ์ฒด ์ธ์คํด์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ์ฝ๋์ ์ ์ฌํ ๊ฐ๋
- ์ปฌ๋ ์ : ์๋ฒ์์ ๊ด๋ฆฌํ๋ ๋๋ ํ ๋ฆฌ๋ผ๋ ๋ฆฌ์์ค
- ์คํ ์ด : ํด๋ผ์ด์ธํธ์์ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ์ ์ฅ์
1. URI๋ ์ ๋ณด์ ์์์ ํํํด์ผ ํ๋ค.
resource๋ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ๋ฅผ, ๋๋ฌธ์๋ณด๋ค๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ค.
resource์ ๋ํ๋จผํธ ์ด๋ฆ์ผ๋ก๋ ๋จ์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
resource์ ์ปฌ๋ ์ ์ด๋ฆ์ผ๋ก๋ ๋ณต์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
resource์ ์คํ ์ด ์ด๋ฆ์ผ๋ก๋ ๋ณต์ ๋ช ์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
Ex) GET/Member/1 -> GET/members/1
2. ์์์ ๋ํ ํ์๋ HTTP Method(GET, PUT, POST, DELETE๋ฑ) ๋ก ํํํ๋ค.
Ex) GET/members/delete/1 -> DELETE/members/1
Ex) GET/members/show/1 -> GET/members/1
Ex) GET/members/insert/2 -> POST/members/2
Ex) student๋ฅผ ์์ฑํ๋ route : POST/students
Ex) id=12์ธ students๋ฅผ ์ญ์ ํ๋ route: DELETE/students/12
1. ์ฌ๋์ ๊ตฌ๋ถ์(/)๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉํ๋ค.
Ex) https://restapi.example.com/house/apartments
2. URI ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์(/)๋ฅผ ํฌํจํ์ง ์๋๋ค.
URI์ ํฌํจ๋๋ ๋ชจ๋ ๊ธ์๋ ๋ฆฌ์์ค์ ์ ์ผํ ์๋ณ์๋ก ์ฌ์ฉ๋์ด์ผ ํ๋ฉฐ URI๊ฐ ๋ค๋ผ๋ค๋ ๊ฒ์ ๋ฆฌ์์ค๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ด๊ณ , ์ญ์ผ๋ก ๋ฆฌ์์ค๊ฐ ๋ค๋ฅด๋ฉด URI๋ ๋ฌ๋ผ์ ธ์ผ ํ๋ค.
REST API๋ ๋ถ๋ช ํ URI๋ฅผ ๋ง๋ค์ด ํต์ ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํผ๋์ ์ฃผ์ง ์๋๋ก URI ๊ฒฝ๋ก์ ๋ง์ง๋ง์๋ ์ฌ๋์(/)๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
Ex) http://restapi.example.com/houses/apartments/ (X)
3. ํ์ดํ(-)์ URI ๊ฐ์กฑ์ฑ์ ๋์ด๋๋ฐ ์ฌ์ฉํ๋ค
4. ๋ฐ์ค(_)์ URI์ ์ฌ์ฉํ์ง ์๋๋ค.
5. URI ๊ฒฝ๋ก์๋ ์๋ฌธ์๊ฐ ์ ํฉํ๋ค.
๋ฐ์ค์ ๋ณด๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ฐ์ค ๋๋ฌธ์ ๋ฌธ์๊ฐ ๊ฐ๋ ค์ง๊ธฐ๋ ํ๋ฏ๋ก ๊ฐ๋ ์ฑ์ ์ํด ๋ฐ์ค์ ์ฌ์ฉํ์ง ์๋๋ค.
RFC 3986(URI ๋ฌธ๋ฒ ํ์)์ URI ์คํค๋ง์ ํธ์คํธ๋ฅผ ์ ์ธํ๊ณ ๋ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ณํ๋๋ก ๊ท์ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
6. ํ์ผํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค.
REST API์์๋ ๋ฉ์์ง ๋ฐ๋ ๋ด์ฉ์ ํฌ๋งท์ ๋ํ๋ด๊ธฐ ์ํ ํ์ผ ํ์ฅ์๋ฅผ URI ์์ ํฌํจ์ํค์ง ์๋๋ค.
Accept header๋ฅผ ์ฌ์ฉํ๋ค.
Ex) http://restapi.example.com/members/soccer/345/photo.jpg (X)
Ex) GET/members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg (O)
7. ๋ฆฌ์์ค ๊ฐ์๋ ์ฐ๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ
Ex) GET: /users/{userid}/devices (์ผ๋ฐ์ ์ผ๋ก ์์ 'has'์ ๊ด๊ณ๋ฅผ ํํํ ๋)