Jieunny์ ๋ธ๋ก๊ทธ
S2) Unit 8. [HTTP/๋คํธ์ํฌ] REST API ๋ณธ๋ฌธ
๐ฃ REST(Representational State Transfer) API
โ๏ธ ์น์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ ์์์ HTTP URI๋ก ํํํ๊ณ , HTTP ํ๋กํ ์ฝ์ ํตํด ์์ฒญ๊ณผ ์๋ต์ ์ ์ํ๋ ๋ฐฉ์ -> ์์๋ณด๊ธฐ ์ฝ๊ณ ์ ์์ฑ๋ ๋ฉ๋ดํ
โฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์๋ ๋ฐ์ดํฐ์ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๊ณ , ์๋ต์ ์ ๋ฌํ๊ธฐ ์ํ '๋ฉ๋ดํ'์ด ํ์ํ๋ค.
โฐ ๋ก์ด ํ๋ฉ์ด๋ ๋ฐ์ฌ ํ์ ๋ ผ๋ฌธ์์ ์ต์ด๋ก ์๊ฐ๋์์ผ๋ฉฐ, ์น ์ค๊ณ์ ์ฐ์์ฑ์ ๋นํด ์ ๋๋ก ์ฌ์ฉ๋์ง ๋ชปํ๋ ๊ฒ์ด ์ํ๊น์ ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ ์ฒ๋ก์จ REST๋ฅผ ๋ฐํํ๋ค.
๐ฃ REST API ๋์์ธํ๋ ๋ฐฉ๋ฒ
โ๏ธ ๋ฆฌ์ฐจ๋์จ์ REST ์ฑ์๋ ๋ชจ๋ธ
โฐ ์ค์ ๋ก 3๋จ๊ณ๊น์ง ์งํค๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ 2๋จ๊ณ๊น์ง๋ง ์ ์ฉํด๋ ์ข์ API ๋์์ธ -> HTTP API ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โฐ ๋ก์ด ํ๋ฉ์ 3๋จ๊ณ๊น์ง ๋ง์กฑํ์ง ๋ชปํ API๋ REST API๊ฐ ์๋ HTTP API๋ผ๊ณ ๋ถ๋ฌ์ผ ํ๋ค๊ณ ์ฃผ์ฅ.
0๏ธโฃ REST ์ฑ์๋ ๋ชจ๋ธ - 0๋จ๊ณ
โ๏ธ ๋จ์ํ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ธฐ๋ง ํด๋ ๋๋ค.
โ๏ธ REST API ๋ผ๊ณ ํ ์ ์๋, REST API ๋ฅผ ์์ฑํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๋จ๊ณ
โฐ ์์ฒ๋ผ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ธฐ๋ง ํด๋ ๋๋ค.
1๏ธโฃ REST ์ฑ์๋ ๋ชจ๋ธ - 1๋จ๊ณ
โ๏ธ ๊ฐ๋ณ ๋ฆฌ์์ค์์ ํต์ ์ ์ค์ํด์ผ ํ๋ค.
โ๏ธ ๋ชจ๋ ์์์ ๊ฐ๋ณ ๋ฆฌ์์ค์ ๋ง๋ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํด์ผํ๋ฉฐ ์์ฒญํ๊ณ ๋ฐ๋ ๋ฆฌ์์ค์ ๋ํ ์ ๋ณด๋ฅผ ์๋ต์ผ๋ก ์ ๋ฌํด์ผ ํ๋ค.
โ ์๋ํฌ์ธํธ๋?
โฐ ์๋น์ค๋ฅผ ์ด์ฉํ ๋ ์ฌ์ฉํ๋ ์ปค๋ฎค๋์ผ์ด์ ์ฑ๋์ ํ์ชฝ ๋์ ํด๋นํ๋ URI (์ต์ข ๋ชฉ์ ์ง)
โฐ API๋ก ์์ฒญ์ ์๋ฒ์ ํต์ ํ ๋, ์๋ฒ๊ฐ ์์ฒญ์ ์๋ฝํ๋ ์์์
โฐ ์ผ๋ฐ์ ์ผ๋ก root-endpoint๋ ๋๋ฉ์ธ ์ฃผ์์ ๋ฃจํธ( / )๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
โฐ 0๋จ๊ณ์์๋ ์์ฒญ์์์ ์๋ํฌ์ธํธ๋ก ๋ชจ๋ /appointment๋ฅผ ์ฌ์ฉํ๋ค.
โฐ ์์ฝ ๊ฐ๋ฅํ ์๊ฐ ํ์ธ์ด๋ผ๋ ์์ฒญ์ ์๋ต์ผ๋ก ๋ฐ๊ฒ ๋๋ ๋ฆฌ์์ค๋ ํ์ค ์ด๋ผ๋ ์์ฌ์ ์์ฝ ๊ฐ๋ฅํ ์๊ฐ๋์ด๋ค.
โฐ ๊ทธ๋์ ์์ฒญ ์ /doctors/ํ์ค ์ด๋ผ๋ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๋ค.
โฐ ๋ํ ํน์ ์๊ฐ์ ์์ฝ์ ํ๋ฉด slots ๋ฆฌ์์ค์ 123์ด๋ผ๋ id๋ฅผ ๊ฐ์ง ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ํน์ ์๊ฐ์ ์์ฝ ์์ฒญ์์๋ /slots/123 ์ผ๋ก ์ค์ ๋ณ๊ฒฝ๋๋ ๋ฆฌ์์ค๋ฅผ ์๋ํฌ์ธํธ๋ก ์ฌ์ฉํ๋ค.
โฐ ์ด๋ค ๋ฆฌ์์ค๋ฅผ ๋ณํ์ํค๋์ง ํน์ ์ด๋ค ์๋ต์ด ์ ๊ณต๋๋์ง์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
โฐ ์์ฒญ์ ๋ฐ๋ฅธ ์๋ต์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์ ๋ฌํ ๋๋ ์ฌ์ฉํ ๋ฆฌ์์ค์ ๋ํ ์ ๋ณด + ๋ฆฌ์์ค ์ฌ์ฉ์ ๋ํ ์ฑ๊ณต/ ์คํจ ์ฌ๋ถ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
โฐ 9์์ ์์ฝ์ ํ์์ผ๋, ์ด๋ฏธ ํด๋น ์๊ฐ์ด ๋ง๊ฐ๋์ด ์์ฝ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ฆฌ์์ค ์ฌ์ฉ์ ๋ํ ์คํจ ์ฌ๋ถ๋ฅผ ํฌํจํ ์๋ต์ ๋ฐ์์ผ ํ๋ค.
2๏ธโฃ REST ์ฑ์๋ ๋ชจ๋ธ - 2๋จ๊ณ
โ๏ธ CRUD์ ๋ง๊ฒ ์ ์ ํ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค.
โฐ 0, 1๋จ๊ณ ์์๋ ๋ชจ๋ ์์ฒญ์ CRUD์ ์๊ด์์ด POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
โฐ 2๋จ๊ณ ์์๋ ์์ฝ ๊ฐ๋ฅํ ์๊ฐ์ ํ์ธํ๋ ๊ฒ์ ์กฐํ(READ), ํน์ ์๊ฐ์ ์์ฝ ํ๋ค๋ ๊ฒ์ ์์ฑ(CREATE)์ ๊ฐ๋ค.
โฐ ๋๋ฌธ์ ์กฐํ๋ GET, ์์ฑ์ POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ค.
โฐ GET ๋ฉ์๋๋ body๋ฅผ ๊ฐ์ง์ง ์๊ธฐ ๋๋ฌธ์ query parameter๋ฅผ ์ฌ์ฉํด์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์ ๋ฌํ๋ค.
โฐ POST ์์ฒญ์ ์๋ต์ ์๋กญ๊ฒ ์์ฑ๋ ๋ฆฌ์์ค๋ฅผ ๋ณด๋ด์ฃผ๊ธฐ ๋๋ฌธ์, ์๋ต ์ฝ๋๋ 201 Created๋ก ๋ช ํํ๊ฒ ์์ฑํด์ผ ํ๋ฉฐ, ๊ด๋ จ ๋ฆฌ์์ค๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ Location ํค๋์ ์์ฑ๋ URI๋ฅผ ํตํด ํ์ธํ ์ ์๋๋ก ํด์ผ ํ๋ค.
๐จ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๋์ ๊ท์น
โฐ GET ๋ฉ์๋ : ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํ์ํค์ง ์๋ ์์ฒญ์ ์ฌ์ฉ
โฐ POST ๋ฉ์๋ : ์์ฒญ๋ง๋ค ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑ
โฐ PUT ๋ฉ์๋ : ์์ฒญ๋ง๋ค ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๋ฐํ(๋ฉฑ๋ฑํ๋ค) -> PUT๊ณผ POST ๊ตฌ๋ถํด์ ์ฌ์ฉ
โฐ PATCH ๋ฉ์๋ : ์์ ํ ๋ ์ฌ์ฉ -> PATCH์ PUT ๊ตฌ๋ถํด์ ์ฌ์ฉ
3๏ธโฃ REST ์ฑ์๋ ๋ชจ๋ธ - 3๋จ๊ณ
โ๏ธ HATEOAS(Hypermedia As The Engine Of Application State) ๋ผ๋ ํ์ดํผ๋ฏธ๋์ด ์ปจํธ๋กค๋ฅผ ์ ์ฉํ๋ค.
โ๏ธ ์์ฒญ์ 2๋จ๊ณ์ ๋์ผํ์ง๋ง, ์๋ต์๋ ๋ฆฌ์์ค์ URI๋ฅผ ํฌํจํ ๋งํฌ ์์๋ฅผ ์ฝ์ ํ์ฌ ์์ฑํด์ผ ํ๋ค.
โฐ ์๋ต์ ๋ค์ด๊ฐ๊ฒ ๋๋ ๋งํฌ ์์๋ ์๋ต์ ๋ฐ๋ ๋ค์์ ํ ์ ์๋ ๋ค์ํ ์ก์ ๋ค์ ์ํด ๋ง์ ํ์ดํผ๋ฏธ๋์ด ์ปจํธ๋กค์ ํฌํจํ๊ณ ์๋ค.
โ ํ์ดํผ๋ฏธ๋์ด ์ปจํธ๋กค์ด๋?
โฐ ์ ์ : ๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ ํ์ดํผ๋ฏธ๋์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋งค์ปค๋์ฆ์ผ๋ก ์ฌ์ฉํ๋ค๋ ๊ฒ
โฐ REST API ๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ ์ผ๋ก ์๋ฒ์ ๋์ ์ธ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฒ
โฐ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์ด๋ ํ ์์ฒญ์ ํ ๋, ์์ฒญ์ ํ์ํ URI๋ฅผ ์๋ต์ ํฌํจ์์ผ ๋ฐํํ๋ ๊ฒ์ผ๋ก ๊ฐ๋ฅํ๊ฒ ํ ์ ์๋ค.
โฐ ์์ฝ ๊ฐ๋ฅ ์๊ฐ์ ํ์ธํ ํ์๋ ๊ทธ ์๊ฐ๋์ ์์ฝํ ์ ์๋ ๋งํฌ๋ฅผ ์ฝ์ ํ๋ค.
โฐ ํน์ ์๊ฐ์ ์์ฝ์ ์๋ฃํ๊ณ ๋์๋ ๊ทธ ์์ฝ์ ๋ค์ ํ์ธํ ์ ์๋๋ก ๋งํฌ๋ฅผ ์์ฑํด ๋ฃ๋๋ค.
โฐ ์๋ต ๋ด์ ์๋ก์ด ๋งํฌ๋ฅผ ๋ฃ์ด ์๋ก์ด ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ์ด 3๋จ๊ณ์ ํต์ฌ
๐ฃ Open API
โ๏ธ ์ ๋ถ์์ ์ ๊ณตํ๋ ๊ณต๊ณต๋ฐ์ดํฐ์ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ์ ๋ถ๋ Open API์ ํํ๋ก ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค.
โฐ ๊ธ์ ๊ทธ๋๋ก ๋๊ตฌ์๊ฒ๋ ์ด๋ ค์๋ API์ง๋ง, API๋ง๋ค ์ ํด์ง ์ด์ฉ ์์น์ด ์๊ณ ๊ทธ์ ๋ฐ๋ผ ์ ํ์ฌํญ์ด ์์ ์ ์๋ค.
โฐ ex ) Open Weather Map ์์ ์ ํ์ ์ด๋๋ง ๋ฌด๋ฃ๋ก ๋ ์จ API๋ฅผ ์ฌ์ฉํ ์ ์๋ค. -> ๋ฐ์ดํฐ๋ฅผ JSON ํํ๋ก ์๋ตํ๋ค.
๐ฃ API Key
โ๏ธ API๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ API Key๊ฐ ํ์ํ๋ค.
โฐ ์๋ฒ์ ๋ฌธ์ ์ฌ๋ ์ด์ ๋ก, ์๋ฒ ์ด์ฉ์๋ ๋น์ฉ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ ์ฅ์์ ๋๊ตฌ๋์๊ฒ ์๋ฌด๋ฐ ์กฐ๊ฑด ์์ด ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์๋ฌด๋ ์๋ค.
โฐ API Key๊ฐ ํ์ํ ๊ฒฝ์ฐ, ๋ก๊ทธ์ธํ ์ด์ฉ์์๊ฒ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ API Key์ ํํ๋ก ์ ๊ณตํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๋ API Key๋ฅผ ๊ฐ์ด ์ ๋ฌํด์ผ ์ํ๋ ์๋ต์ ๋ฐ์ ์ ์๋ค.
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S2) Unit 9. [React] React ๋ฐ์ดํฐ ํ๋ฆ (0) | 2023.02.02 |
---|---|
S2) Unit 8. [HTTP/๋คํธ์ํฌ] Postman (0) | 2023.02.01 |
S2) Unit 7. [HTTP/๋คํธ์ํฌ] ๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ(๋ณด์ด๋ ๊ณณ) (0) | 2023.01.30 |
S2) Unit 7. [HTTP/๋คํธ์ํฌ] ๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ(๋ณด์ด์ง ์๋ ๊ณณ) (0) | 2023.01.30 |
S2) Unit 7. [HTTP/๋คํธ์ํฌ] HTTP (0) | 2023.01.30 |