๐ REST
โ
REST๋?
-
Representational State Transfer์ ์ฝ์๋ก ์ํํธ์จ์ด ํ๋ก๊ทธ๋จ ์ํคํ
์ณ์ ํ ํ์.
-
์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น resource์ ์ํ(์ ๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์๋ฏธ.
-
REST๋ ์น์ ๊ธฐ์กด ๊ธฐ์ ๊ณผ HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์ ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ
์ณ ์คํ์ผ.
โ
REST์ ์ ์
HTTP URI๋ฅผ ํตํด ์์์ ๋ช
์ํ๊ณ HTTP Method(POST, GET, PUT, DELETE ๋ฑ)๋ฅผ ํตํด
ํด๋น ์์์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธ.
- ์น ์ฌ์ดํธ์ ๋ชจ๋ ์์์ ๊ณ ์ ํ ID์ธ HTTP URI๋ฅผ ๋ถ์ฌ.
- CRUD Operation
- Create : ์์ฑ (POST)
- Read : ์กฐํ (GET)
- Update : ์์ (PUT)
- Delete : ์ญ์ (DELETE)
- HEAD : header ์ ๋ณด ์กฐํ (HEAD)
โ
REST์ ๊ตฌ์ฑ์์
โ ์์ (Resource) - URI
โ ์์์ ๋ํ ํ์ (Verb) - Http Method
โ ์์์ ๋ํ ํ์์ ๋ด์ฉ (Representations) : HTTP Message Pay Load
โ
REST์ ํน์ง
Server-Client (์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ)
- REST Server์ ํด๋ผ์ด์ธํธ๋ ๊ฐ๊ฐ์ ์ญํ ์ด ๋
๋ฆฝ๋์ด ์์กด์ฑ์ด ๋ฎ์์ผ ํจ.
- ์๋ ์ชฝ์ด Server, ์์์ ์์ฒญํ๋ ์ชฝ์ด Client๊ฐ ๋จ.
- REST Server : API๋ฅผ ์ ๊ณตํ๊ณ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ์ ์ฑ
์์ง.
- Client : ์ฌ์ฉ์ ์ธ์ฆ์ด๋ context(์ธ์
, ๋ก๊ทธ์ธ ์ ๋ณด)๋ฑ์ ์ง์ ๊ดํ๋ผ๊ณ ์ฑ
์์ง.
Stateless (๋ฌด์ํ์ฑ)
- HTTP ํ๋กํ ์ฝ์ Stateless ํ๋กํ ์ฝ์ด๋ฏ๋ก REST ๋ํ ๋ฌด์ํ์ฑ์ ๊ฐ์ง.
- Client์ context๋ฅผ Server์ ์ ์ฅํ์ง ์์.
- ์ธ์
, ์ฟ ํค๊ฐ์ context ์ ๋ณด๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋์ด ๊ตฌํ์ด ๋จ์ํด์ง.
- Server๋ ๊ฐ๊ฐ์ ์์ฒญ์ ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ์ธ์ํ๊ณ ์ฒ๋ฆฌ.
- ๊ฐ API Server๋ Client์ ์์ฒญ๋ง์ ๋จ์ ์ฒ๋ฆฌ.
Cacheable (์บ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ)
- HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์์.
- ์บ์ ์ฌ์ฉ์ ํตํด ์๋ต์๊ฐ์ด ๋นจ๋ผ์ง๊ณ RESR Server ํธ๋ฉ์ญ์
์ด ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์๋ต์๊ฐ, ์ฑ๋ฅ, ์๋ฒ์ ์์ ์ด์ฉ๋ฅ ํฅ์.
Layered System (๊ณ์ธตํ ๊ตฌ์กฐ)
- Client๋ REST API ์๋ฒ๋ง ํธ์ถํจ.
- REST Server๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ.
- ํ๋ก์, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- URI๋ก ์ง์ ํ Resource์ ๋ํ ์กฐ์์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํ.
- ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข
์๋์ง ์๊ณ HTTP ํ์ค ํ๋กํ ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ.
Code-On-Demand [optional]
- Server๋ก ๋ถํฐ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ์์ Client์์ ์คํ.
๐ REST API
โ
REST API๋?
-
REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
-
API : ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ์งํฉ์ ์ ๊ณตํ์ฌ ์ปดํจํฐ ํ๋ก๊ทธ๋จ๊ฐ ์ํธ์์ฉ์ ์ด์งํ๋ฉฐ, ์๋ก ์ ๋ณด๋ฅผ ๊ตํ ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฒ.
โ
REST API ์ค๊ณ ๊ธฐ๋ณธ ๊ท์น
1. URI๋ ์ ๋ณด์ resource๋ฅผ ํํํด์ผํจ
- resource๋ ๋์ฌ๋ณด๋ค๋ ๋ช
์ฌ๋ฅผ, ๋๋ฌธ์๋ณด๋ค๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉ.
- resource์ ๋ํ๋จผํธ ์ด๋ฆ์ผ๋ก๋ ๋จ์ ๋ช
์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํจ.
- resource์ ์ปฌ๋ ์
์ด๋ฆ์ผ๋ก๋ ๋ณต์ ๋ช
์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํจ.
- resource์ ์คํ ์ด ์ด๋ฆ์ผ๋ก๋ ๋ณต์ ๋ช
์ฌ๋ฅผ ์ฌ์ฉํด์ผ ํจ.
๐ ๋ฆฌ์์ค์ ์ํ
โ ๋ํ๋จผํธ : ๋จ์ผ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์๋ ๋ฐ์ดํฐ.
โ ์ปฌ๋ ์
: ์๋ฒ์์ ๊ด๋ฆฌํ๋ ๋๋ ํฐ๋ฆฌ๋ผ๋ ๋ฆฌ์์ค.
โ ์คํ ์ด : ํด๋ผ์ด์ธํธ์์ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ์ ์ฅ์.
2. resource์ ๋ํ ํ์๋ HTTP Method (POST, GET, PUT, DELETE ๋ฑ)๋ก ํํ
- URI์ HTTP Method๊ฐ ๋ค์ด๊ฐ๋ฉด ์๋จ.
GET /users/delete/2
โ โ DELETE /users/2
โญ
- URI์ CRUD์ ๊ธฐ๋ฅ์ ๋ํ๋ด๋ ํ์์ ๋ํ ๋์ฌ ํํ์ด ๋ค์ด๊ฐ๋ฉด ์๋จ.
GET /users/insert/2
โ โ POST /users/2
โญ
- ๊ฒฝ๋ก ๋ถ๋ถ ์ค ๋ณํ๋ ๋ถ๋ถ(์ธ๋ถ resource)์ ์ ์ผํ ๊ฐ(id)์ผ๋ก ๋์ฒดํ๋ค.
- id = 2 ์ธ user๋ฅผ ์ญ์ ํ๋ route:DELETE /users/2
โ
REST API ์ค๊ณ ์ธ๋ถ ๊ท์น
1. ์ฌ๋์ ๊ตฌ๋ถ์(/)๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉ
http://restapi.example.com/drink/coffee
2. URI ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์(/)๋ฅผ ํฌํจํ์ง ์์
- โ
http://restapi.example.com/drink/coffee/
โ
3. ํ์ดํ(-)์ URI ๊ฐ๋
์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ
http://restapi.example.com/drink/sugar-free
4. ๋ฐ์ค(_)์ URI์ ์ฌ์ฉํ์ง ์์
- โ
http://restapi.example.com/drink/sugar_free
โ
5. URI ๊ฒฝ๋ก์๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉ
- URI ๊ฒฝ๋ก์ ๋๋ฌธ์์ ์ฌ์ฉ์ ํผํ๋ค
6. ํ์ผ ํ์ฅ์๋ URI์ ํฌํจํ์ง ์์
- message body ๋ด์ฉ์ ํฌ๋งท์ ๋ํ๋ด๊ธฐ ์ํ ํ์ผ ํ์ฅ์๋ฅผ URI ์์ ํฌํจ์ํค์ง ์๊ณ , Accept header๋ฅผ ์ฌ์ฉํ๋ค.
- โ
http://restapi.example.com/drink/coffee/1/photo.jpg
โ
GET /drink/coffee/1/photo HTTP/1.1 Host: restapi.example.com
Accept: image/jpg
7. ๋ฆฌ์์ค ๊ฐ ์ฐ๊ด๊ด๊ณ ํํ
- /๋ฆฌ์์ค๋ช
/๋ฆฌ์์คID/๊ด๊ณ๊ฐ ์๋ ๋ค๋ฅธ ๋ฆฌ์์ค๋ช
GET users/{userid}/orders
(์ผ๋ฐ์ ์ผ๋ก ์์ ๊ด๊ณ ํํํ ๋ ์ฌ์ฉ)
๐ RESTful
โ
RESTful์ด๋?
- REST๋ผ๋ ์ํคํ
์ณ๋ฅผ ๊ตฌํํ๋ ์น ์๋น์ค๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ฉ์ด.
- REST API๋ฅผ ์ ๊ณตํ๋ ์น ์๋น์ค๋ฅผ RESTful ํ๋ค๊ณ ํ ์ ์๋ค.
โ
RESTful์ ๋ชฉ์
- ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด REST API๋ฅผ ๋ง๋๋ ๊ฒ
- RESTfulํ API๋ฅผ ๊ตฌํํ๋ ๊ทผ๋ณธ์ ์ธ ๋ชฉ์ ์ ์ฑ๋ฅ ํฅ์์ด ์๋๋ผ ์ผ๊ด์ ์ธ ์ปจ๋ฒค์
์ ํตํ API์ ์ดํด๋ ๋ฐ ํธํ์ฑ์ ๋์ด๋ ๊ฒ.
๐ ์ฐธ๊ณ :
https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://dodop-blog.tistory.com/272
https://zsgg.tistory.com/entry/REST-API-%EB%94%94%EC%9E%90%EC%9D%B8-%EA%B7%9C%EC%B9%99