โ๏ธ ์์
REST API, REST ์ฑ์๋ ๋ชจ๋ธ 3๋จ๊ณ, OPEN API ๋ฑ์ ๋ํด ํ์ตํ๋ค.
์ด์ ์ ํ์ตํ๋ HTTP/๋คํธ์ํฌ ์ ํ ํ์ต์ ํด์ผ ์ด๋ ์ ๋ ์ดํด๊ฐ ๊ฐ๋ ์์ญ์ธ ๊ฑฐ ๊ฐ๋ค.
๐REST API
REST(Representational State Transfer)
- ์น(http)์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ
์ฒ
API(Application Programming Interface)
- ์ ํ๋ฆฌ์ผ์ด์
ํ๋ก๊ทธ๋จ ์ธํฐํ์ด์ค์ ์ค์๋ง
- ์๋ฒ์ ํต์ ํ ์ ์๊ฒ ๋์์ฃผ๋ ์ธ์ด๋ ๋ฉ์์ง ํ์์ผ๋ก ์ค๊ฐ ์ญํ ์์ด๋ค.
REST API
์ธํฐ๋ท๊ณผ ์น์ ํตํด์ ๋์ ์ปดํจํฐ๋ฅผ ์ ์ดํ ๋ ์ด๋ป๊ฒ ํ๋ฉด ์ํ์ฐฉ์ค๋ฅผ ์ค์ด๊ณ ๋ ์ข์ API๋ฅผ ๋ง๋ค ์ ์๋์ง ๊ณ ๋ฏผํ๋ฉฐ ์๊ธด๊ฒ REST API์ด๋ค.
- ์น์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๋ ์์(Resource)๋ฅผ HTTP URI๋ก ํํํ๊ณ ,
HTTPํ๋กํ ์ฝ์ ํตํด ์์ฒญ๊ณผ ์๋ต์ ์ ์ํ๋ ๋ฐฉ์์ด๋ค.
- Resource๋ URI ํตํด ํํํ๋ค.
topices(์ ๋ณด ๋ฐ์ดํฐ)
- Collection : URI๋ก ํํํ ๊ฒ (Element๊ฐ ๋ชจ์ฌ์๋ ๊ฒ)
http://example.com/topics
(๋ณต์ํ ์ฌ์ฉ)
- Elemet : ํ๋ ํ๋์ ๋ฐ์ดํฐ (Collection์ ํ๋ ํ๋์ ๋ฐ์ดํฐ)
http://eveample.com/topics/1
Resource๋ CRUD์ ๋ง๊ฒ ์์
ํ๋ค.
- Creat(์์ฑ) : post
- Read(์ฝ๊ธฐ) : get
- Update(์์ ) :
- put : ๊ต์ฒด
- patch : ์์
- Delete(์ญ์ ) : delete
์ด๊ฒ๋ค์ method
๋ผ๊ณ ํ๋ค.
๐REST ์ฑ์๋ 4๋จ๊ณ ๋ชจ๋ธ (REST API ๋์์ธ ๋ฐฉ๋ฒ)
REST API ์์ฑ์ ๋ช ๊ฐ์ง ์ง์ผ์ผํ ๊ท์น์ด ์กด์ฌํ๊ณ ์ด๋ฅผ 4๋จ๊ณ๋ก ๋๋ ๋จ๋ค.
โ๏ธ 0 ๋จ๊ณ(HTTP ์ฌ์ฉ) - ๊ธฐ๋ณธ๋จ๊ณ
- ๋จ์ํ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ธฐ๋ง ํด๋ ๋๋ค.
- ํด๋น ๋จ๊ณ๋ REST API๋ผ๊ณ ํ ์ ์๊ณ REST API๋ฅผ ์์ฑํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๋จ๊ณ์ด๋ค.
- REST API์ ์ถ๋ฐ์
โ๏ธ 1 ๋จ๊ณ(๊ฐ๋ณ ๋ฆฌ์์ค์์ ํต์ ์ค์)
- ๋ชจ๋ Resource๋ ๊ฐ๋ณ ๋ฆฌ์์ค์ ๋ง๋ ์๋ํฌ์ธํธ(Endpoint)๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
- ์์ฒญํ๊ณ ๋ฐ๋ ์์์ ๋ํ ์ ๋ณด๋ฅผ ์๋ต์ผ๋ก ์ ๋ฌํด์ผํ๋ค.
์๋ํฌ์ธํธ ์์ฑ์
- ๋์ฌ, HTTP ๋ฉ์๋, ์ด๋ค ํ์์ ๋ํ ๋จ์ด ์ฌ์ฉ์ ์ง์ํ๋ค.
- ๋ช
์ฌ ํํ์ ๋จ์ด๋ก ์์ฑํ๋ ๊ฒ์ด ์ข๋ค.
์์ฒญ์ ๋ฐ๋ฅธ ์๋ต์ผ๋ก ๋ฆฌ์์ค ์ ๋ฌํ ๋
- ์ฌ์ฉํ ๋ฆฌ์์ค์ ๋ํ ์ ๋ณด์ ํจ๊ป ๋ฆฌ์์ค์ ์ฌ์ฉ์ ๋ํ ์ฑ๊ณต/์คํจ ์ฌ๋ถ๋ฅผ ๋ฐํ ํด์ํ๋ค.
0,1 ๋จ๊ณ์์ ๋ชจ๋ ์์ฒญ์ CRUD์ ์๊ด์์ด POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
โ๏ธ 2 ๋จ๊ณ(HTTP ๋ฉ์๋ ์์น ์ค์)
- CRUD์ ๋ง๊ฒ ์ ์ ํ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ค์ ์ ๋๋ค.
0, 1 ๋จ๊ณ์์ ๋ชจ๋ ์์ฒญ์ CRUD์ ์๊ด์์ด POST๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ ๋๋
2 ๋จ๊ณ์ ๋ฐ๋ฅด๋ฉด CRUD์ ์ ํฉํ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
HTTP ๋ฉ์๋ ์ฌ์ฉ์ ๋ช ๊ฐ์ง ๊ท์น
- GET : ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณํ์ํค์ง ์๋ ์์ฒญ์ ์ฌ์ฉํด์ผํ๋ค.
- POST : ์์ฒญ๋ง๋ค ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ค.
- PUT : ์์ฒญ๋ง๋ค ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๋ฐํํ๋ค.
๋ฉฑ๋ฑ(idempotent) : ๋งค ์์ฒญ๋ง๋ค ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๋ฐํํ๋ ํน์ง
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ PUT
๊ณผ ๊ทธ๋ ์ง ์๋ POST
์ ๊ตฌ๋ถํด ์ฌ์ฉํด์ผํ๋ค.
2๋จ๊ณ ๊น์ง ์ ์ฉํด๋ ์ ์์ฑ๋ API๋ผ๊ณ ํ๋ค.
๋จ, 3๋จ๊ณ ๊น์ง ๋ง์กฑํ์ง ๋ชปํ API๋ HTTP API๋ผ๊ณ ๋ถ๋ฅธ๋ค.
โ๏ธ 3 ๋จ๊ณ(HATEOAS ์ค์)
- HATEOAS(Hypermedia As The Engine Of Application State)๋ผ ํํ๋๋ ํ์ดํผ ๋ฏธ๋์ด ์ปจ๋๋กค์ ์ ์ฉํ๋ค.
- ์๋ต ๋ด ์๋ก์ด ๋งํฌ๋ฅผ ๋ฃ์ด ์๋ก์ด ๊ธฐ๋ฅ์ ์ ๊ธ ํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค.(ํต์ฌ)
- 3๋จ๊ณ ์์ฒญ์ 2๋จ๊ณ์ ๋์ผํ์ง๋ง
์๋ต์๋ ๋ฆฌ์์ค์ URI๋ฅผ ํฌํจํ ๋งํฌ ์์๋ฅผ ์ฝ์
ํด ์์ฑํด์ผํ๋ค.
๋ง์ฝ ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์๋ค์ด ์๋ต์ ๋ด๊ฒจ ์๋ ๋งํฌ๋ค์ ๋์ฌ๊ฒจ ๋ณธ๋ค๋ฉด,
์ด๋ฌํ ๋งํฌ๋ค์ ์ข ๋ ์ฝ๊ณ , ํจ์จ์ ์ผ๋ก ๋ฆฌ์์ค์ ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์๋ ์์๊ฐ ๋ ์ ์๋ค.
๐Open API
- ๋๊ตฌ์๊ฒ๋ ์ด๋ ค์๋ API
- ๊ทธ๋ ๋ค๊ณ "๋ฌด์ ํ"์ผ๋ก ์ด์ฉํ ์ ์๋ค.
- API๋ง๋ค ์ ํด์ง ์ด์ฉ ์์น์ด ์กด์ฌํ๊ณ ์์น์ ๋ฐ๋ฅธ ์ ํ์ฌํญ์ด ์์ ์ ์๋ค. (๊ฐ๊ฒฉ, ์ ๋ณด ์ ํ ๋ฑ)
Open Weather Map์ด๋ผ๋ ์น ์ฌ์ดํธ์์ ์ ๊ณตํ๋ ๋ ์จ API๊ฐ ๊ทธ ์์์ด๋ค.
๐API Key
- API๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ API Key๊ฐ ํ์ํ๋ค.
- ์์(Resource)์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํด์ค๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ๊ฒฝ์ฐ API Key๋ฅผ ๊ฐ์ด ์ ๋ฌํด์ผ ์ํ๋ ์ ๋ณด ์๋ต์ ๋ฐ์ ์ ์๋ค.
โ๏ธ ๋ง์น๋ฉฐ
์ด์ ํ์ต HTTP/๋คํธ์ํฌ ๊ธฐ์ด๊ฐ ์๊ฐ ๋ณด๋ค ์ดํด๊ฐ ์ ๊ฐ์ง ์์๋ค.
์ด๋ฒ REST API๋ ๊ทธ๋ฌ๋ฉด ์ด์ฉ์ง ํ๋ค.
๋ถํธ์บ ํ์์ ์ ๊ณตํ ํ์ต ๋ด์ฉ ๋ง์ผ๋ก๋ ์ญ์๋ ์ดํดํ๊ธฐ ์ด๋ ค์ ๊ณ
์ ํ๋ธ ๊ฐ์(์ํ์ฝ๋ฉ, ์ฝ๋ฉ์ ํ)๋ฅผ ์ฐพ์ผ๋ฉฐ ์ด๋ ์ ๋ ์ดํด ํ ์ ์์๋ค.
๊ณต๋ถํ ๋ ์ฐธ๊ณ ํ๋ ์์
์ํ์ฝ๋ฉ(๊ธฐ๊ณ๋ค์ ๋ํ๋ฒ - REST API) : https://youtu.be/PmY3dWcCxXI
์ฝ๋ฉ์ ํ(API ์ค๋ช
) : https://youtu.be/ckSdPNKM2pY