REST API
REST API์์ REST๋ Representational State Transfer์ ์ฝ์๋ก, ์น์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ ์์(Resource)์ HTTP URI๋ก ํํํ๊ณ HTTP ํ๋กํ ์ฝ์ ํตํด ์์ฒญ๊ณผ ์๋ต์ ์ ์ํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฒญ๊ณผ ์๋ต์ ๋ฐ๋ผ ๋ฆฌ์์ค๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด์๋ API๋ฅผ ์์๋ณด๊ธฐ ์ฝ๊ฒ ์ ์์ฑํ๋ ๊ฒ์ด ์ค์ํ๋ค. REST๋ ์ด๋ฅผ ์ํ ๋ฆฌ์์ค ์ค์ฌ์ ์ผ์ข ์ ๋ฐฉ๋ฒ๋ก ์ด์ ์ํคํ ์ฒ(API๋ฅผ ์ค๊ณํ๊ณ ๊ตฌ์ถํ๋๋ฐ ์ฌ์ฉํ๋ ํจํด๊ณผ ๊ธฐ์ )์ด๋ผ ๋ณผ ์๋ ์๋ค. ์ฆ, REST๋ฅผ ์ด์ฉํด ์์ฑ๋ API๊ฐ REST API์ธ ๊ฒ์ด๋ค.
REST API ์ฑ์๋ ๋ชจ๋ธ
REST API๋ฅผ ์์ฑํ ๋๋ ๋ช ๊ฐ์ง ์ง์ผ์ผ ํ ๊ท์น์ด ์๊ณ , ๋ ์ค๋๋ฅด๋ ๋ฆฌ์ฐจ๋์จ(Leonard Richardson)์ ์ด๋ฅผ ์ ์ ์ฉํ๊ธฐ ์ํ 4๋จ๊ณ ๋ชจ๋ธ์ ์ ์ํ๋ค. ์ด๋ฅผ REST API ์ฑ์๋ ๋ชจ๋ธ์ด๋ผ ํ๋ค.
REST ์ฑ์๋ ๋ชจ๋ธ์ 0~3๋จ๊ณ๊น์ง ์ด 4๋จ๊ณ๋ก ๋๋์ด์ง๊ณ , ์ค์ ๋ก ์๋ฐํ๊ฒ 3๋จ๊ณ๊น์ง ์งํค๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก 2๋จ๊ณ๊น์ง๋ง ์ ์ฉํด๋ ์ข์ API ๋์์ธ์ด๋ผ ๋ณผ ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ HTTP API๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
0๋จ๊ณ : HTTP ํ๋กํ ์ฝ ์ฌ์ฉ
0๋จ๊ณ๋ ๋จ์ํ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ธฐ๋ง ํด๋ ๋๋ค. ๋ฌผ๋ก ์ด ๋จ๊ณ์์ ํด๋น API๋ฅผ REST API๋ผ ๋ถ๋ฅผ ์ ์๊ณ , REST API๋ฅผ ์์ฑํ๋ ๊ธฐ๋ณธ ๋จ๊ณ๋ก ์ดํดํ๋ฉด ๋๋ค. ์๋์ ์์๋ ์์ฝ์ ์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ด ์๋ฒ์ ํต์ ํ๋ ์ํฉ์ด๋ผ ๊ฐ์ ํ๋ค.
1๋จ๊ณ : ๊ฐ๋ณ ๋ฆฌ์์ค์์ ํต์ ์ค์
1๋จ๊ณ๋ ๊ฐ๋ณ ๋ฆฌ์์ค(Resource)์์ ํต์ ์ ์ค์ํด์ผ ํ๋ค. ์์ ์ค๋ช ํ REST์ ์ ์์ ๋ฐ๋ฅด๋ฉด ๋ฐ์ดํฐ๋ ์์(Resource)์ HTTP URI๋ก ํํํ๋ค๊ณ ํ๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์์์ ๊ฐ๋ณ ๋ฆฌ์์ค์ ๋ง๋ ์๋ํฌ์ธํธ(Endpoint)๋ฅผ ์ฌ์ฉํด์ผ ํ๊ณ ์์ฒญํ๊ณ ๋ฐ๋ ์์์ ๋ํ ์ ๋ณด๋ฅผ ์๋ต์ผ๋ก ์ ๋ฌํ๋ ๊ฒ์ด 1๋จ๊ณ์ ํต์ฌ์ด๋ค.
์์ ์์์ฒ๋ผ ์ด๋ค ๋ฆฌ์์ค๋ฅผ ๋ณํ์ํค๋์ง ํน์ ์ด๋ค ์๋ต์ด ์ ๊ณต๋๋์ง์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ ์ ํ ์๋ํฌ์ธํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ค์ํ๋ค. ์๋ํฌ์ธํธ ์์ฑ ์์๋ ๋์ฌ, HTTP ๋ฉ์๋, ์ด๋ค ํ์์ ๋ํ ๋จ์ด ์ฌ์ฉ์ ์ง์ํ๊ณ ๋ฆฌ์์ค์ ์ง์คํด ๋ช ์ฌ ํํ์ ๋จ์ด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ด์ ํจ๊ป, ์์ฒญ์ ๋ฐ๋ฅธ ์๋ต์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉํ ๋ฆฌ์์ค์ ๋ํ ์ ๋ณด์ ๋๋ถ์ด ๋ฆฌ์์ค ์ฌ์ฉ์ ๋ํ ์ฑ๊ณต/์คํจ ์ฌ๋ถ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
2๋จ๊ณ : HTTP ๋ฉ์๋ ์์น ์ค์
2๋จ๊ณ๋ CRUD์ ๋ง๊ฒ ์ ์ ํ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํฌ์ปค์ค๋ฅผ ๋๋ค. 0๋จ๊ณ์ 1๋จ๊ณ์ ์์๋ ๋ชจ๋ POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง, 2๋จ๊ณ์ ๋ฐ๋ฅด๋ฉด ์ด๋ CRUD์ ๋ง๋ ์ ํฉํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊ฒ์ด ์๋๋ค.
์์๋ฅผ ๊ธฐ์ค์ผ๋ก, ์์ฝ ๊ฐ๋ฅํ ์๊ฐ์ ํ์ธํ๋ ๊ฒ์ ์กฐํ(READ)ํ๋ ํ์์ด๊ธฐ ๋๋ฌธ์ ์กฐํ๋ GET
๋ฉ์๋๋ก ์์ฒญ์ ๋ณด๋ด๊ณ , GET
๋ฉ์๋๋ body
๋ฅผ ๊ฐ์ง์ง ์๊ธฐ ๋๋ฌธ์ query parameter๋ฅผ ์ฌ์ฉํด ํ์ํ ๋ฆฌ์์ค๋ฅผ ์ ๋ฌํ๋ค.
์์ฝ์ ํ๋ ๊ฒ์ ์์ฝ์ ์์ฑ(CREATE)ํ๋ ๊ฒ์ด๋ฏ๋ก POST
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ, POST
์์ฒญ์ ๋ฐ๋ฅธ ์๋ต ์ญ์ ์ค์ํ๋ค. ์ด ๊ฒฝ์ฐ ์๋ต์ ์๋กญ๊ฒ ์์ฑ๋ ๋ฆฌ์์ค๋ฅผ ๋ณด๋ด์ฃผ๊ธฐ ๋๋ฌธ์ ์๋ต์ฝ๋๋ 201 Created
๋ก ๋ช
ํํ๊ฒ ์์ฑ๋์ด์ผ ํ๊ณ ์ด์ ํจ๊ป Location
ํค๋์ ๊ด๋ จ ๋ฆฌ์์ค์ URI๋ฅผ ํจ๊ป ์๋ตํ๋ฏ๋ก ์ฑ์๋ ๋ชจ๋ธ 2๋จ๊ณ๋ฅผ ์ถฉ์กฑํ ๊ฒ์ด๋ผ ๋ณผ ์ ์๋ค.
HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋ ๋ช ๊ฐ์ง ๊ท์น์๋ ์ ์ํ์.
GET
๋ฉ์๋์ ๊ฒฝ์ฐ READ์ด๋ฏ๋ก ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํ์ํค์ง ์๋ ์์ฒญ์ ์ฌ์ฉํ๋ค.
POST
๋ฉ์๋๋ ์์ฒญ๋ง๋ค ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ์ง๋งPUT
๋ฉ์๋๋ ์์ฒญ๋ง๋ค ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๋ฐํํ๋ค. ์ด๋ ๊ฒ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๋ฐํํ๋ ํน์ง์ ๋ฉฑ๋ฑ(idempotent)ํ๋ค๊ณ ๋ถ๋ฅด๋ฉฐ, ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ ๋ฉ์๋PUT
๊ณผ ๊ทธ๋ ์ง ์์POST
๋ ๊ตฌ๋ถํด์ผ ํ๋ค.
PUT
๊ณผPATCH
๋ ๊ตฌ๋ถํด์ ์ฌ์ฉํด์ผ ํ๋ค. ๊ฐ์ UPDATE์ด์ง๋งPUT
์ ๊ต์ฒด,PATCH
๋ ์์ ์ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
3๋จ๊ณ : HATEOAS ์์น ์ค์
3๋จ๊ณ๋ HATEOAS(Hypertext As The Engine Of Application State)๋ผ๋ ์ฝ์ด๋ก ํํ๋๋ ํ์ดํผ๋ฏธ๋์ด ์ปจํธ๋กค์ ์ ์ฉํ๋ค. 3๋จ๊ณ์ ์์ฒญ์ 2๋จ๊ณ์ ๋์ผํ์ง๋ง, ์๋ต์๋ ๋ฆฌ์์ค์ URI๋ฅผ ํฌํจํ ๋งํฌ ์์๋ฅผ ์ฝ์ ํ์ฌ ์์ฑํด์ผ ํ๋ค. ์ด๋ ์๋ต์ ๋ค์ด๊ฐ๋ ๋งํฌ ์์๋ ์๋ต์ ๋ฐ์ ๋ค์์ ํ ์ ์๋ ๋ค์ํ ์ก์ ๋ค์ ์ํด ๋ง์ ํ์ดํผ๋ฏธ๋์ด ์ปจํธ๋กค์ ํฌํจํ๋ค. ์ด๋ ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์๋ค์ด ์๋ต์ ๋ด๊ธด ๋งํฌ๋ฅผ ํตํด ์กฐ๊ธ ๋ ์ฝ๊ณ ํจ์จ์ ์ผ๋ก ๋ฆฌ์์ค์ ๊ธฐ๋ฅ์ ์ ๊ทผํ๊ฒ๋ ํ๋ ์์๊ฐ ๋๋ค.
Open API
Open API๋ ๋ง ๊ทธ๋๋ก ๋๊ตฌ์๊ฒ๋ ์ด๋ ค์๋ API๋ฅผ ๋ปํ๋ค. ๋จ, ๋ฌด์ ํ์ผ๋ก ์ด์ฉ์ด ๊ฐ๋ฅํ ๊ฒ์ด ์๋ API๋ง๋ค ์ ํด์ง ์ด์ฉ ์์น์ด ์๊ณ ์ด์ ๋ฐ๋ฅธ ์ ํ์ฌํญ(๊ฐ๊ฒฉ, ์ ๋ณด์ ์ ํ ๋ฑ)์ด ์์ ์ ์๋ค. Open API์ ๋ํ์ ์ธ ์๋ก๋ ์ ๋ถ์์ ์ ๊ณตํ๋ ๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ, ๋ค์ด๋ฒ์์ ์ ๊ณตํ๋ ๋ค์ด๋ฒ ์คํ API๊ฐ ์๋ค.
API Key
์๋ฒ๋ฅผ ์ด์ฉํ๋ ๋ฐ์๋ ๋น์ฉ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ ์ฅ์์๋ ์๋ฌด๋ฐ ์กฐ๊ฑด ์์ด ์ต๋ช ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์๋ฌด๊ฐ ์๋ค. ๊ทธ๋์ ์ผ๋ฐ์ ์ผ๋ก API๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ API Key๊ฐ ํ์ํ๋ค. (๊ฐ๋ API Key๊ฐ ํ์ํ์ง ์๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ๋ค)
์๋ฒ์ชฝ์์๋ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ API Key ํํ๋ก ์ ๊ณตํ๊ณ , ํด๋ผ์ด์ธํธ ์ชฝ์์๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ API Key๋ฅผ ๊ฐ์ด ์ ๋ฌํด์ผ ์ํ๋ ์๋ต์ ๋ฐ์ ์ ์๋ ๋ฐฉ์์ด๋ค.
Uploaded by N2T