REST ๊ทธ๋ฆฌ๊ณ RESTful API
๐ก API(Application Programming Interface)๋?
API๋ ํํ โํ๋ก๊ทธ๋จ๋ค์ด ์ํตํ ์ ์๋ ์ธํฐํ์ด์คโ ๋ผ๊ณ ํ๋ค.
์๋ฅผ ๋ค๋ฉด, ํด๋ผ์ด์ธํธ๊ฐ โ์ค๋ ๋ ์จ ๋ฐ์ดํฐโ๊ฐ ํ์ํ๋ค๊ณ ๊ฐ์ ํด๋ดค๋ค.
๊ทธ๋ฌ๋ฉด API๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์์ ์ ๋ฆฌํ ๋ค, โ๋ ์จ ๋ฐ์ดํฐ์๋ฒโ์
โ์ค๋ ๋ ์จ์ ๋ํ ์ ๋ณด๋ฅผ ์ฃผ์ธ์โ๋ผ๊ณ ์์ฒญ์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์
์์ฒญ์ ํ๋ ํด๋ผ์ด์ธํธ์๊ฒ ๋ ์จ ์ ๋ณด๋ฅผ ๋ฐํํด์ค๋ค. ์ด๋ ๊ฒ API๋
ํ๋ก๊ทธ๋จ๊ณผ ํ๋ก๊ทธ๋จ ์ฌ์ด์ ์๋ ์ค๊ฐ ์ ๋ฌ์ ์ญํ ์ ์ํํ๋ค๊ณ ์ดํดํ๋ค.
๐ก API Server๋?
API ์๋ฒ๋ โ๊ท๊ฒฉํ ๋์ด ์๋ ์๋ฒโ๋ผ๊ณ ํ ์ ์๋ค.
๐ก REST (REpresentational State Transfer)
REST๋ Application ๊ฐ๋ฐ์ ์ํคํ ์ณ ์ค ํ๋์ด๋ค. ํ๊ตญ์ด๋ก ์ง์ญ์ ํด๋ณด๋ฉด
โ๋ํ ์ํ ์ ์กโ ์ด๋ค. ์ํคํ ์ฒ๊ฐ ๋๋ฌด ์ถ์์ ์ด๋ผ ๊ฒ์ํด ๋ณธ ๊ฒฐ๊ณผ,
Application์ ์ค๊ณ, ์ ์ํ๋๋ฐ ์ฌ์ฉํ๋ ํจํด๊ณผ ๊ธฐ์ ์ ์ด์นญ์ด๋ผ๊ณ ํ๋ค.
๋ํ ํ๋กํ ์ฝ์ ๋ ๋ฆฝ์ ์ด๊ณ ์ผ๋ฐ์ ์ธ REST๊ตฌํ์์ HTTP๋ฅผ ์ฌ์ฉํ๋ค.
REST์ ๊ฐ๋ ์ ์ข ์์ธํ ์์๋ณด์๋ค.
๏ผ. Web Application ์์ ์กด์ฌํ๋ ๋ชจ๋ ๋ฆฌ์์ค์ ๋ํด ๊ณ ์ ์ URI์ ๋ถ์ฌํ๋ค.
๏ผ. HTTP method๋ฅผ ์ด์ฉํด ๋ฆฌ์์ค์ CRUD ๋ช ๋ น์ ์ ์ฉํ๋ค.
์ฆ, ์ด๋ค ๋ฆฌ์์ค์ ๋ํด CRUD์ฐ์ฐ์ ์ํํ๊ธฐ ์ํด URI(URL)๋ก ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ด๋ค.
RESTful API๋ REST์ ๊ธฐ์ค์ ๋ฐ๋ฅด๋ API์ ๋๋ก ์ดํดํ๋ค.
์ถ๊ฐ์ ์ผ๋ก URI์ URL์ ๋ํ ์ฐจ์ด๋ฅผ ์ฐพ์๋ณด์๋๋ฐ,
URL์ Uniform Resource Locator๋ก ์ธํฐ๋ท ์ ์์์ ์์น๋ฅผ ์๋ฏธํ๋ค.
์์์ ์์น๋ผ๋ ๊ฒ์ ๊ฒฐ๊ตญ ์ด๋ค ํ์ผ์ ์์น๋ฅผ ์๋ฏธํ๋ค.
๋ฐ๋ฉด์ URI๋ Uniform Resource Identifier๋ก ์ธํฐ๋ท ์์ ์์์
์๋ณํ๊ธฐ ์ํ ๋ฌธ์์ด์ ๊ตฌ์ฑ์ผ๋ก, URI๋ URL์ ํฌํจํ๋ค.
๐ REST์ ๊ตฌ์ฑ์์
REST์ ๊ตฌ์ฑ ์์ ๋ค์ 3๊ฐ์ง์ ์์๋ก ๊ตฌ์ฑ๋๋ค.
๏ผ. ์์(Resource)
-
์์์ ํด๋ผ์ด์ธํธ์์ ์ก์ธ์คํ ์ ์๋ ๋ชจ๋ ์ข ๋ฅ์ โ๊ฐ์ฒด/์๋น์คโ ์ด๋ค.
๋ชจ๋ ์์์ ๊ณ ์ ์ URI(URL)์ ๊ฐ์ง๋ฉฐ ํด๋ผ์ด์ธํธ๋ ์ด URI๋ฅผ ์ง์ ํ์ฌ
ํด๋น ์์์ ๋ํด CRUD ๋ช ๋ น์ ์ํํ ์ ์์ต๋๋ค.
(ex: https://adventure-works.com/orders/1)
โ
๏ผ. ํ์(Verb)
- ํ์๋ ํด๋ผ์ด์ธํธ๊ฐ HTTP Method๋ฅผ ์ด์ฉํ์ฌ ์์์ ์กฐ์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
โ
๏ผ. ํํ(Representation)
-
ํด๋ผ์ด์ธํธ๊ฐ HTTP Method๋ก ์์์ ์กฐ์ํ๋ฉด ์๋ฒ๊ฐ ๊ทธ์ ๋ํ ์๋ต(JSON, XML)์
๋ณด๋ด๋๋ฐ ๊ทธ๊ฒ์ ์๋ฏธํฉ๋๋ค.(์์ฆ์ XML์ ์ ์ฌ์ฉ์ํ๋ค๊ณ ํ๋ค.)
๐ REST์ ํน์ง
๏ผ. ์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ(Server-Client Architecture)
-
์๋ฒ๋ API ์ ๊ณต, ํด๋ผ์ด์ธํธ๋ ์ ์ ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ ๋ดํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์
์๋ฒ์ ํด๋ผ์ด์ธํธ์ ์ญํ ์ ๋ถ๋ช ํ๊ฒ ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
โ
๏ผ. ๋ฌด์ํ์ฑ(Stateless)
-
HTTP๋ฅผ ์ด์ฉํ๋ ๋งํผ Stateless์ ํน์ฑ์ ๊ฐ์ง๋๋ค.
๊ฐ๊ฐ์ ์์ฒญ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ์ง ์๊ณ ๋ณ๊ฐ์ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
๋๋ถ์ ๊ตฌํ์ด ์ฝ๊ณ ์๋ฒ์ ๋ถ๋ด์ ๋์ด์ค ์ ์์ต๋๋ค.
(ex. ๊ฒ์์ฐฝ์ ์ง๋ฌธ์ ์ ๋ ฅํ๊ณ ์ํฐํค๋ฅผ ๋๋ฅด๋ ํ์์ผ๋ก ์งํ๋๋ ์จ๋ผ์ธ ๊ฒ์)
-
Stateless์ ๋ฐ๋ ๊ฐ๋ ์ ์คํ ์ดํธํ(Stateful)์ด๋ค.
Stateful์ํ์ ์น์ ๊ฒฝ์ฐ ์ค๊ฐ์ค๊ฐ ์ ๋ณด๊ฐ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์์ ์ด
์ค๋จ๋๋๋ผ๋ ์ค๋จ ๋ ๊ณณ๋ถํฐ ๋ค์ ์์ํ ์ ์๋ค. โ
๏ผ. ์บ์ ๊ฐ๋ฅ(Cacheable)
-
HTTP๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์น์ ๊ธฐ๋ณธ ์ธํ๋ผ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์
์บ์ ๊ธฐ๋ฅ์ ์ด์ฉํด ๊ฐ์ URI์ ๋ํ ๋ฐ๋ณต๋ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
โ
๏ผ. ์ผ๊ด๋ ์ธํฐํ์ด์ค(Uniform Interface)
-
HTTP๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ด๋ผ๋ฉด ํ๋ซํผ์ ์๊ด์์ด ์ฌ์ฉํ ์ ์์ผ๋ฉฐ
๋ฆฌ์์ค์ ํ์ ์ ์๊ด ์์ด ๊ฐ์ ํํ์ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
์๋๋ Uniform Interface์ 4๊ฐ์ง ์ ์ฝ ์กฐ๊ฑด์ด๋ค,
๏ผ. Identification of resources(๋ฆฌ์์ค๊ฐ URI๋ก ์๋ณ๋์ด์ผ ํ๋ค.)
๏ผ. Manipulation of resources through representations (CRUD ๋ช ๋ น์ ๋ฉ์ธ์ง์ ๋ช ์)
๏ผ. Self-descriptive messages
๏ผ. Hypermedia as the engine of application state(HATEOAS)
๋๋ถ๋ถ์ REST API๋ 3๋ฒ, 4๋ฒ ์ ์ฝ ์กฐ๊ฑด์ ์ ๋ง์กฑํ์ง ๋ชปํ๋ค๊ณ ํ๋ค.
๊ทธ ์ด์ ์ ๋ํด ์์ ๋ณด์๋ค.
Self-descriptive messages๋ ๋ฉ์ธ์ง๊ฐ ์ค์ค๋ก ์ค๋ช ์ ํด์ผํ๋ค๋ ๋ป์ด๋ค.
์๋ ๊ทธ๋ฆผ์์ ์ผ์ชฝ ๊ทธ๋ฆผ์ ๋ชฉ์ ์ง๊ฐ ์์ด์ RESTํ์ง ์์๋ค.
๋ค์ ๊ทธ๋ฆผ์์ ์ผ์ชฝ ๊ทธ๋ฆผ์ Content-Type์ด ๋ง์ง ์์์ REST ํ์ง ์๋ค.
HATEOAS๋ ํ์ดํผ๋งํฌ๋ฅผ ํตํ ์ ์ด๋ฅผ ์๋ฏธํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ Uniform Interface๊ฐ ํ์ํ ๊น? ๋ฐ๋ก ๋ ๋ฆฝ์ ์ธ ์งํ๋ฅผ ํ๊ธฐ ์ํด์๋ค.
์๋ฅผ ๋ค๋ฉด ๋ด๊ฐ ๊ฐ๋ฐํ ์๋ฒ์ ์๋ก์ด API๊ฐ ์ถ๊ฐ๋๊ณ , ์ญ์ ๋ ๊ฒฝ์ฐ ์๋ฒ์
๊ธฐ๋ฅ์ด ๋ฐ๋๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ ํด๋ผ์ด์ธํธ๋ ์ ๋ฐ์ดํธ๋ฅผ ํ ํ์๊ฐ ์ ํ์๋ค.
์ด๊ฒ ๋ฐ๋ก REST๋ฅผ ๋ง๋ค๊ฒ ๋ ๊ณ๊ธฐ ์ด๋ค.
๊ฒฐ๊ตญ ๋ ๋ฆฝ์ ์ธ ์งํ๊ฐ ๋ก์ด ํ๋ฉ์ด REST๋ฅผ ๋ง๋ ๊ถ๊ทน์ ์ธ ์ด์ ์ด๋ค.
REST๊ฐ ์น์ ๋ ๋ฆฝ์ ์งํ์ ๋์์ ์ฃผ์๋๊ฐ? YES
-
HTTP์ ์ง์์ ์ผ๋ก ์ฌํฅ์ ์ค
-
Host ํค๋ ์ถ๊ฐ
-
๊ธธ์ด ์ ํ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ด ๋ช ์
-
URI์์ ๋ฆฌ์์ค์ ์ ์๊ฐ ์ถ์์ ์ผ๋ก ๋ณ๊ฒฝ๋จ โจ ์๋ณํ๊ณ ์ ํ๋ ๋ฌด์ธ๊ฐ
โ
๏ผ. ์์ฒด์ ์ธ ํํ ๊ตฌ์กฐ(Self-Descriptiveness)
-
JSON, XML๋ฑ์ ์ด์ฉํ๋ ๋ฉ์ธ์ง ๊ตฌ์กฐ๋ก ํด๋น ๋ฉ์ธ์ง๊ฐ ๋ฌด์์,
์ด๋ค ํ์๋ฅผ ์๋ฏธํ๋์ง ์ง๊ด์ ์ผ๋ก ์ดํดํ ์ ์์ต๋๋ค.
Jsonํ์์ ์ธ๊ฐ๊ณผ ๊ธฐ๊ณ๊ฐ ๋ชจ๋ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ค.
โ
๏ผ. ๊ณ์ธต ๊ตฌ์กฐ(Layered System)
-
ํด๋ผ์ด์ธํธ๋ ๋์ ์๋ฒ์ ์ง์ ํต์ ํ๋์ง ์๋๋ฉด ์ค๊ฐ ์๋ฒ์ ํต์ ํ๋์ง ์ ์
์์ต๋๋ค. ๋ฐ๋ผ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ํต์ ์ฌ์ด์ ๋ณด์์ด๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฑ์
์ํ ์ค๊ฐ ๊ณ์ธต์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ โ๋ก๋ ๋ฐธ๋ฐ์ฑโ์ด๋ ๋คํธ์ํฌ ๋๋ ์๋ฒ์ ๊ฐํด์ง๋ ๋ถํ๋ฅผ ๋ถ์ฐํด์ฃผ๋ ๊ธฐ์ ์ด๋ค.
๐ REST์ ์ฅ์
๏ผ. ๋ณ๋์ ์ธํ๋ผ ๊ตฌ์ถ ํ์x
- HTTP๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ ํ์๊ฐ ์์ต๋๋ค.
โ
๏ผ. ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ๋ถ๋ฆฌ
-
ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ REST API๋ฅผ ํตํด ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ๋๋ฌธ์
๋ ๊ฐ์ ์ญํ ์ด ๋ช ํํ๊ฒ ๋ถ๋ฆฌ๋ฉ๋๋ค.
โ
๏ผ. ํ๋ซํผ์ ๋ ๋ฆฝ์
- HTTP๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ ํ๊ฒฝ์ด๋ผ๋ฉด ํ๋ซํผ์ ์๊ด์์ด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
โ
๏ผ. ์ฌ์ด ์ฌ์ฉ
- ๋ฉ์ธ์ง๊ฐ ์์ฒด์ ์ผ๋ก ๋ฌด์์ ์๋ฏธํ๋์ง ํํํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ด ์ฝ์ต๋๋ค.
๐ REST์ ๋จ์
๏ผ. ํ์ค์ด ์กด์ฌํ์ง ์์
-
๋ช ํํ ํ์ค์ด ์กด์ฌํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ REST์ ํน์ง์ ๋ฐ๋ฅด์ง ์์ผ๋ฉด์
REST API๋ก ์ค๊ณ๋๋ ์ด์ํ API๊ฐ ํ์ํ ์ ์์ผ๋ฉฐ ๊ด๋ฆฌ๊ฐ ์ด๋ ต์ต๋๋ค.
โ
๏ผ. HTTP Method์ ํ๊ณ
- HTTP Method๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ CRUD๋ผ๋ ๋จ์ํ ํ์์ Method๋ง ์ง์ํฉ๋๋ค.
โ
๏ผ. RDBMS์ ๋ง์ง ์์
-
REST์์๋ ๋ฆฌ์์ค๋ฅผ JSON, XML๋ฑ์ ํํ๋ก ํํํ๋๋ฐ ์ด๋ RDBMS์๋ ๋ง์ง ์๋
ํํ์ ๋๋ค. ๊ทธ๋์ NoSQL์ชฝ์ด ๋ ์ ํธ๋๋ ์ถ์ธ์ ๋๋ค.
๐ก HTTP ๋ฉ์๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ธฐ๋ณธ ์์ ์ ์
๏ผ. GET
1
โฆ ๋ฆฌ์์ค ํํ, ์๋ต ๋ณธ๋ฌธ์ ๋ฆฌ์์ค์ ์ธ๋ถ ์ ๋ณด
๏ผ. POST
1
2
3
โฆ ์ ๋ฆฌ์์ค ์์ฑ ์์ฒญ. ์์ฒญ ๋ณธ๋ฌธ์ ์ ๋ฆฌ์์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ ๊ณต
โฆ ๋ฉฑ๋ฑ์ฑ ๋ฏธ๋ณด์ฅ
๏ผ. PUT
1
2
3
โฆ ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ์ ๋ถ ๋์ฒด. ์์ฒญ ๋ณธ๋ฌธ์ ๊ฐฑ์ ํ ๋ฆฌ์์ค ์ ๋ณด๋ฅผ ์ ๊ณต.
โฆ ๋ฉฑ๋ฑ์ฑ ๋ณด์ฅ
๏ผ. PATCH
1
2
3
โฆ ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ๋ถ๋ถ ๋์ฒด. ์์ฒญ ๋ณธ๋ฌธ์ ๊ฐฑ์ ํ ๋ฆฌ์๋ฅด ์ ๋ณด๋ฅผ ์ ๊ณต
โฆ ๋ฉฑ๋ฑ์ฑ ๋ฏธ๋ณด์ฅ
๏ผ. DELETE
1
โฆ ์ง์ ๋ฆฌ์์ค ์ ๊ฑฐ.
๋ฉฑ๋ฑ์ฑ์ด ๋ญ์ง ๋ชจ๋ฅด๊ฒ ์ด์ ๊ตฌ๊ธ๋ง์ ํ๋ค.
๋์ผํ ์์ฒญ์ ํ ๋ฒ ๋ณด๋ด๋ ๊ฒ๊ณผ ์ฌ๋ฌ ๋ฒ ์ฐ์์ผ๋ก ๋ณด๋ด๋ ๊ฒ์ด ๊ฐ์ ํจ๊ณผ๋ฅผ ์ง๋๊ณ ,
์๋ฒ์ ์ํ๋ ๋์ผํ๊ฒ ๋จ์ ๋, ํด๋น HTTP ๋ฉ์๋๊ฐ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ก๋ค๊ณ ๋งํ๋ค.
GET, HEAD, PUT, DELETE ๋ฉ์๋๋ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ฉฐ, POST ๋ฉ์๋๋ ๊ทธ๋ ์ง ์๋ค.
์๋ฅผ ๋ค์ด, DELETE๊ฐ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ค๋ ๊ฒ์, REST API์์ ๊ฐ๋ฐ์๋ DELETE๋ฉ์๋๋ฅผ
์ฌ์ฉํด โ๋ชฉ๋ก์ ๋ง์ง๋ง ํญ๋ชฉ ์ ๊ฑฐโ ๊ธฐ๋ฅ์ ๊ตฌํํด์๋ ์๋๋ค๋ ๊ฒ์ด๋ค.
๐ก REST API๋?
REST API๋ REST์ ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ API๋ฅผ ์๋ฏธํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ง์ผ์ผํ๋ ๊ท์น์ด ์๋ค.
๏ผ. URI๋ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ๋ฅผ, ๋๋ฌธ์๋ณด๋ค๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ์ผํ๋ค.
๏ผ. ๋ง์ง๋ง์ โ / โ ๋ฅผ ํฌํจํ์ง ์๋๋ค.
๏ผ. ์ธ๋๋ฐ(_) ๋์ ํ์ดํฐ(-)์ ์ฌ์ฉํ๋ค.
๏ผ. ํ์ผํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค.
๏ผ. ํ์๋ฅผ ํฌํจํ์ง ์๋๋ค.
1
2
3
โฆ http://example.com/delete-post/1 (X)
โฆ http://example.com/post/1 (O)
๐ ์ ์ ์๋ ๊น?
ํ์ฌ REST API๋ผ๊ณ ๋ถ๋ฅด๋ ๋๋ถ๋ถ์ REST API๊ฐ ์๋๋ค!. ์์ผ๊น?
ํํ ์นํ์ด์ง์ โ๋ฏธ๋์ด ํ์ โ์ HTML์ด๋ค. ๋ฐ๋ฉด์ HTTP API๋ JSON์ ์ฌ์ฉํ๋ค.
๋์ ํฐ ์ฐจ์ด์ ์ HTML์ ๊ธฐ๊ณ๊ฐ ์ดํด๋ฅผ ํ ์ ์๋ ์ธ์ด์ด๋ค.
HTML์ ํ์ดํผ๋งํฌ๊ฐ ์๊ณ , Self-descriptive๊ฐ ๋๋ค.
ํ์ง๋ง JSON์ ํ์ดํผ๋งํฌ๊ฐ ์ ์๋์ด ์์ง ์๊ณ , Self-descriptive๊ฐ ๋ถ์์ ํ๋ค.
๐ REST API๋ก ๊ณ ์ณ๋ณด๊ธฐ
Self-descriptive ๋ฐฉ๋ฒ1. Media type
Media type์ ์๋กํ๋ ์ ์ํ๊ณ Media type๋ฌธ์๋ฅผ ์์ฑํ๋ค.
ํด๋น ๋ฌธ์์ โidโ๊ฐ ๋ญ์ง ์๋ฏธ๋ฅผ ์ ํ๋ค. IANA์ Media type์ ๋ฑ๋กํ๋ค.
์ฑ๊ณต์ ์ด์ง๋ง ๋งค๋ฒ Media type์ ์ ํด์ผํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค.
Self-descriptive ๋ฐฉ๋ฒ2. Profile
๋ฉ์ธ์ง์ Link: <https://example.com/test/>; rel="profile"๋ผ๊ณ ์์ฑํ๋ค.
ํ์ง๋ง ํด๋ผ์ด์ธํธ ์ธก์์ ์ ๋งํฌ๋ฅผ ์ดํด ๋ชปํ ์๋ ์๋ค.
HATEOAS๋ ๋ฐฉ๋ฒ1. Data
๋ณธ๋ฌธ์๋ค๊ฐ ๊ทธ๋ฅ ๋งํฌ๋ฅผ ๋ฃ๊ฑฐ๋ JSON์ผ๋ก ํ์ดํผ๋งํฌ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์
์ ์ํ ๊ฒ๋ค์ ํ์ฉํ๋ค.
HATEOAS๋ ๋ฐฉ๋ฒ2. HTTP ํค๋
Link, Locations ๋ฑ์ ํค๋๋ก ๋งํฌ๋ฅผ ํํํ๋ค.
๐ก RESTful์ด๋?
RESTful์ด๋ REST์ ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์คํ ์ ์๋ฏธํ๋ค.
ํ์ง๋ง REST๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋๋ผ๋ ์ ๋ถ RESTful ํ ๊ฒ์ ์๋๋ผ๊ณ ํ๋ค.
์ฆ, REST API์ ์ค๊ณ ๊ท์น์ ์ฌ๋ฐ๋ฅด๊ฒ ์งํจ ์์คํ ์ RESTfulํ๋ค ๋งํ ์ ์๋ค.
๋ฐ๋ฉด REST API๋ฅผ ์ฌ์ฉํ์์ง๋ง RESTful ํ์ง ๋ชปํ ์์คํ ์ ์๋์ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์๋ค๊ณ ํ๋ค.
๏ผ. ๋ชจ๋ CRUD ๊ธฐ๋ฅ์ POST๋ก ์ฒ๋ฆฌ ํ๋ API
๏ผ. URI ๊ท์น์ ์ฌ๋ฐ๋ฅด๊ฒ ์งํค์ง ์์ API
๏ผ. REST API์ ์ค๊ณ ๊ท์น์ ์ฌ๋ฐ๋ฅด๊ฒ ์งํค์ง ๋ชปํ ์์คํ



