junghyunlyoo restapi - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
REST API์ ์๋ฏธ
-
REST(REpresentational State Transfer) '๋ํ์ ์ธ ์ํ ์ ๋ฌ'
-
REST๋, "์น์ ์กด์ฌํ๋ ๋ชจ๋ ์์(์ด๋ฏธ์ง, ๋์์, DB ์์)์ ๊ณ ์ ํ URI๋ฅผ ๋ถ์ฌํด ํ์ฉ"ํ๋ ๊ฒ
-
์์์ ์ ์ํ๊ณ ์์์ ๋ํ ์ฃผ์๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ๋ก ์ ์๋ฏธ
-
๋ฐ๋ผ์ Restful API๋ REST ํน์ง์ ์งํค๋ฉด์ API๋ฅผ ์ ๊ณตํ๋ ๊ฒ
REST API์ ์์
http://uniesta.com/news/view.do?ncd=3421128
์ด URI๋ Non RESTful URI๋ก, ์ด๋ค ์์(resource)์ธ์ง ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
http://uniesta.com/boards/1/posts/406
์ด URL๋ RESTful URI๋ก, ์์ฒญํ๋ ์์(resource)์ด ๊ฒ์ํ๋ค ์ค ์ฒซ๋ฒ์งธ ๊ฒ์ํ์ ์๊ณ , ๊ทธ ๊ฒ์ํ์ ๊ธ๋ค ์ค 406๋ฒ์งธ ๊ธ์์ ์ฝ๊ฒ ์ ์ ์๋ค.
REST API์ ๊ตฌ์ฑ
์์ | ์์ |
---|---|
์์(RESOURCE) | URI |
ํ์(Verb) | HTTP METHOD |
ํํ(Representations) | /users GET |
REST API์ ํน์ง
Stateless
HTTP๋ Stateless Protocol ์ด๋ฏ๋ก, REST ์ญ์ ๋ฌด์ํ์ฑ์ ๊ฐ๋๋ค.
์ฆ, HttpSession๊ณผ ๊ฐ์ ์ปจํ
์คํธ ์ ์ฅ์์ ์ํ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ์ง ์๊ณ , API ์๋ฒ๋ ๋ค์ด์ค๋ ์์ฒญ๋ง์ ๋จ์ ์ฒ๋ฆฌํ๋ค.
์ธ์
๊ณผ ๊ฐ์ ์ปจํ
์คํธ ์ ๋ณด๋ฅผ ์ ๊ฒฝ์ธ ํ์๊ฐ ์์ด ๊ตฌํ์ด ๋จ์ํด์ง๋ค.
Cacheable
HTTP ๊ธฐ์กด์ ์น ํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก, ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉ ๊ฐ๋ฅํ๋ค.
HTTP ํ๋กํ ์ฝ ๊ธฐ๋ฐ์ ๋ก๋๋ฐธ๋ฐ์๋, SSL์ ๋ฌผ๋ก ์ด๊ณ HTTP๊ฐ ๊ฐ์ง ๊ฐ์ฅ ๊ฐ๋ ฅํ ํน์ง ์ค์ ํ๋์ธ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉ ๊ฐ๋ฅํ๋ค.
Self-descriptiveness
๋์ฌ(Method) + ๋ช
์ฌ(URI) ๋ก ์ด๋ฃจ์ด์ ธ์์ด ์ด๋ค ๋ฉ์๋์ ๋ฌด์จ ํ์๋ฅผ ํ๋์ง, ๋ฌธ์๋ฅผ ๋ณด์ง ์๊ณ ๋ ํ์
ํ ์ ์๋ค.
REST API์ ์ค๊ณ1 - ๊ธฐ๋ณธ์ค๊ณ
-
URI๋ ์์์ ํํํด์ผ ํ๋ค.(๋ฆฌ์์ค๋ช ์ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ๋ฅผ ์ฌ์ฉ)
-
๊ทธ๋ฆฌ๊ณ ์ฌ๋์ ๊ตฌ๋ถ์(/)๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉํ๋ค.
ex1) http://restapi.example.com/houses/apartments
ex2) http://restapi.example.com/animals/mammals/whales
-
๋ถ๋ช ํ URI๋ฅผ ๋ง๋ค์ด ํต์ ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํผ๋์ ์ฃผ์ง ์๋๋ก URI์ ๋ง์ง๋ง์๋ ์ฌ๋์(/)๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
-
URI์ ํฌํจ๋๋ ๋ชจ๋ ๊ธ์๋ ๋ฆฌ์์ค์ ์ ์ผํ ์๋ณ์๋ก ์ฌ์ฉ๋์ด์ผ ํ๋ค.
-
URI์ ๋๋ฌธ์ ์ฌ์ฉ์ ํผํ๋๋ก ํด์ผ ํ๋ค. (๋์๋ฌธ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฆฌ์์ค๋ก ์ธ์ํ๊ฒ ๋๊ธฐ ๋๋ฌธ)
-
URI๋ฅผ ์ฝ๊ฒ ์ฝ๊ณ ํด์ํ๊ธฐ ์ํด ๋ถ๊ฐํผํ๊ฒ ๊ธด URI๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด, ํ์ดํ์ ์ฌ์ฉํด ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์๋ค.
(_์ URI์ ์ฌ์ฉํ์ง ์๋๋ค.)
- ๋ฉ์์ง ๋ฐ๋ ๋ด์ฉ์ ํฌ๋งท์ ๋ํ๋ด๊ธฐ ์ํ ํ์ผ ํ์ฅ์๋ฅผ URI ์์ ํฌํจ์ํค์ง ์๋๋ค. ๋์ Accept header๋ฅผ ์ฌ์ฉํ๋ค.
ex) GET /members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg
- ์์์ ๋ํ ํ์๋ HTTP Method(GET, POST, PUT, DELETE ๋ฑ)์ผ๋ก ํํ
REST API์ ์ค๊ณ2 - ๋ฆฌ์์ค ๊ฐ์ ๊ด๊ณ ํํ
- REST ๋ฆฌ์์ค ๊ฐ์๋ ์ฐ๊ด ๊ด๊ณ๊ฐ ์์ ์ ์๊ณ , ์ด๋ฐ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ํํํ๋ค.
/๋ฆฌ์์ค๋ช
/๋ฆฌ์์คID/๊ด๊ณ๊ฐ ์๋ ๋ค๋ฅธ ๋ฆฌ์์ค๋ช
ex) GET : /users/{userid}/devices (์ผ๋ฐ์ ์ผ๋ก ์์ โhasโ์ ๊ด๊ณ๋ฅผ ํํํ ๋)
- ๊ด๊ณ๋ช ์ด ๋ณต์กํ๋ค๋ฉด ์ด๋ฅผ ์๋ธ ๋ฆฌ์์ค์ ๋ช ์์ ์ผ๋ก ํํํ๋ค.
ex) GET : /users/{userid}/likes/devices (์ฌ์ฉ์๊ฐ ์ข์ํ๋ ๋๋ฐ์ด์ค ๋ชฉ๋ก)
REST API์ ์ค๊ณ3 - ์์์ ํํํ๋ Colllection๊ณผ Document
Collection๊ณผ Document์ ๋ํด ์ดํดํ๋ฉด URI ์ค๊ณ๊ฐ ์์ํด์ง๋ค.
Collection๊ณผ Document๋ URI์ ํํ๋๋ ๋ฆฌ์์ค๋ฅผ ์๋ฏธํ๋ค.
-
Collection -> ๋ฌธ์๋ค์ ์งํฉ, ๊ฐ์ฒด๋ค์ ์งํฉ
-
Document -> Collection ์ค ํ๋์ ํน์ ๊ฐ์ฒด
http:// restapi.example.com/sports/soccer
Collection : sports
Document : soccer
http:// restapi.example.com/sports/soccer/players/13
Collection : sports, players
Document : soccer, 13๋ฒ player
์ด ๋๊ฐ์ ์๋ก ๋ณด๋ฉด ์ ์ ์๋ฏ, Collection์ ๋ณต์๋ก ์ฌ์ฉํ๊ณ ์๋ค.
์ข ๋ ์ง๊ด์ ์ธ REST API๋ฅผ ์ํด์, ๋ฆฌ์์ค๊ฐ ๋จ์์ธ์ง, ๋ณต์์ธ์ง ์ ํํ ํํํ๋ ๊ฒ์ด ์ข๋ค.
REST API์ ์ค๊ณ์ ์๋ชป๋ ์
x | o |
---|---|
GET /members/delete/1 | DELETE /members/1 |
GET /members/show/1 | GET /members/1 |
GET /members/insert/2 | POST /members/2 |