Network
๐[Network] RESTful API๋ ๋ฌด์์ผ๊น์?
-
RESTful API๋ REST(Representational State Transfer) ์ํคํ
์ฒ ์คํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์น API๋ฅผ ์๋ฏธํฉ๋๋ค.
- RESTful API๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ ํจ์จ์ ์ด๊ณ ์ผ๊ด์ฑ ์๊ฒ ์ค๊ณํ๊ธฐ ์ํด HTTP ํ๋กํ ์ฝ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์
๋๋ค.
-
RESTful์ ํน์ ๊ธฐ์ ์ด๋ ํ๋กํ ์ฝ์ ์ง์นญํ๋ ๊ฒ์ ์๋์ง๋ง, REST ์ํคํ
์ฒ์ ์์น์ ์ค์ํ๋ API๋ฅผ ์ค๋ช
ํ ๋ ์ฌ์ฉํ๋ ์ฉ์ด์
๋๋ค.
1๏ธโฃ REST(Representational State Transfer)์ ๊ธฐ๋ณธ ๊ฐ๋
.
- REST๋ Roy Fielding์ด 2000๋
๋ฐ์ฌ ๋
ผ๋ฌธ์์ ์๊ฐํ ๋ถ์ฐ ์์คํ
์ ์ค๊ณํ๊ธฐ ์ํ ์ํคํ
์ฒ ์คํ์ผ์
๋๋ค.
-
RESTful API๋ ์ด ์์น์ ๋ฐ๋ฅด๋ API๋ก, ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ, ๋ฌด์ํ์ฑ, ์บ์ฑ ๊ฐ๋ฅ์ฑ, ๊ณ์ธตํ๋ ์์คํ
๊ณผ ๊ฐ์ REST์ ์ฃผ์ ์ ์ฝ์ ๋ฐ๋ฆ
๋๋ค.
2๏ธโฃ REST์ ์ฃผ์ ์์น ๋ฐ RESTful API์ ํน์ง.
1๏ธโฃ ์์(Resource) ๊ธฐ๋ฐ.
- REST์์๋ ๋ชจ๋ ๊ฒ์ ์์์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๋ ํ๋์ ์์, ๊ฒ์๋ฌผ์ ๋ ๋ค๋ฅธ ํ๋์ ์์์ผ๋ก ์ทจ๊ธ๋ฉ๋๋ค.
- ๊ฐ ์์์ ๊ณ ์ ํ URI(Uniform Resource Identifer)๋ฅผ ํตํด ์๋ณ๋ฉ๋๋ค.
- ์๋ฅผ ๋ค์ด,
https://api.example.com/user/1
๋ id=1
์ธ ์ฌ์ฉ์ ์์์ ๋ํ๋
๋๋ค.
๐ URI ์ค๊ณ ์์
-
GET /users
-> ๋ชจ๋ ์ฌ์ฉ์ ๋ชฉ๋ก ๊ฐ์ ธ์ค๊ธฐ
-
GET /users/1
-> ํน์ ์ฌ์ฉ์(id=1) ๊ฐ์ ธ์ค๊ธฐ
-
POST /users/1
-> ์ ์ฌ์ฉ์ ์์ฑ
-
PUT /users/1
-> ์ฌ์ฉ์ ์ ๋ณด ์
๋ฐ์ดํธ
-
DELETE /users/1
-> ์ฌ์ฉ์ ์ญ์
2๏ธโฃ HTTP ๋ฉ์๋ ์ฌ์ฉ.
- RESTful API๋ HTTP ๋ฉ์๋๋ฅผ ์์์ ์์
๊ณผ ์ฐ๊ด์ํค๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
- ์ฃผ์ ๋ฉ์๋๋ก๋ GET, POST, PUT, DELETE๊ฐ ์์ต๋๋ค.
-
GET : ์์์ ์กฐํํ ๋ ์ฌ์ฉํฉ๋๋ค.
-
POST : ์์์ ์์ฑํ ๋ ์ฌ์ฉํฉ๋๋ค.
-
PUT : ์์์ ์
๋ฐ์ดํธํ ๋ ์ฌ์ฉํฉ๋๋ค.
-
DELETE : ์์์ ์ญ์ ํ ๋ ์ฌ์ฉํฉ๋๋ค.
- ์ด๋ฌํ HTTP ๋ฉ์๋์ ์ฌ์ฉ์ ์์ฒญ์ ๋ชฉ์ ์ ๋ช
ํํ ํ๊ณ , ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ํธ์์ฉ์ ์ผ๊ด์ฑ ์๊ฒ ๋ง๋ญ๋๋ค.
3๏ธโฃ ๋ฌด์ํ์ฑ(Stateless)
- RESTful API๋ ๋ฌด์ํ(Stateless)ํด์ผ ํฉ๋๋ค.
-
์ฆ, ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ๊ฐ๊ฐ์ ์์ฒญ์ ๋
๋ฆฝ์ ์ด์ด์ผ ํ๋ฉฐ, ์์ฒญ์ ์์กดํด์๋ ์ ๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๋งค ์์ฒญ๋ง๋ค ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์๋ฒ์ ๋ณด๋ด์ผ ํ๋ฉฐ, ์๋ฒ๋ ํด๋น ์์ฒญ๋ง์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ฐํํฉ๋๋ค.
4๏ธโฃ ์บ์ ๊ฐ๋ฅ(Cacheable)
- RESTful API์์ ์๋ต์ ์บ์ ๋ ์ ์์ด์ผ ํฉ๋๋ค.
- ์๋ฒ๋ ์๋ต์ ๋ํ ์บ์ฑ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ช
ํํ ์ ๋ฌํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์์์ ๋ถํ์ํ ์์ฒญ์ ๋ฐ๋ณตํ์ง ์๋๋ก ํ๊ธฐ ์ํด, ์๋ฒ๋ HTTP ํค๋์
Cache-Control
์ด๋ Expires
์ ๊ฐ์ ์บ์ ๊ด๋ จ ์ ๋ณด๋ฅผ ํฌํจํ์ฌ ์๋ต์ ๋ณด๋ผ ์ ์์ต๋๋ค.
5๏ธโฃ ๊ณ์ธตํ๋ ๊ตฌ์กฐ.
- RESTful ์ํคํ
์ฒ๋ ๊ณ์ธตํ๋ ์์คํ
์ ์ง์ํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ์ค๊ฐ ์๋ฒ(ํ๋ก์, ๊ฒ์ดํธ์จ์ด ๋ฑ)๋ฅผ ํต๊ณผํ๋๋ผ๋, ์์ฒญ๊ณผ ์๋ต์ด ์ฒ๋ฆฌ๋๋ ๋ฐฉ์์ ๋ํด ์ ๊ฒฝ ์ธ ํ์๊ฐ ์์ต๋๋ค.
- ์๋ฒ๋ ์ฌ๋ฌ ๊ณ์ธต์ ํตํด ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฑ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
6๏ธโฃ ์ผ๊ด๋ ์ธํฐํ์ด์ค.
- RESTful API๋ ์ผ๊ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
- ์ด๋ ์์์ ์ ๊ทผํ๊ณ ์กฐ์ํ๋ ๋ฐฉ์์ด ๋ช
ํํ๊ณ ์ผ๊ด์ ์ด์ด์ผ ํ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ ์์์ ๋ํด ๋์ผํ ๋ฐฉ์์ผ๋ก ์์
์ ์ํํ ์ ์์ด์ผ ํ๋ค๋ ์๋ฏธ์
๋๋ค.
7๏ธโฃ ํํ(Representation) ์ ์ก.
- ์์ ์์ฒด๋ ์๋ฒ์ ์ ์ฅ๋๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ์๋ฒ์์ ์์์ ํํ(Representation) ์ ์ ์ก๋ฐ์ต๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก RESTful API๋ JSON์ด๋ XML ํ์์ผ๋ก ์์์ ์ํ๋ฅผ ํํํ๋ฉฐ, ์ด๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํฉ๋๋ค.
๐ ์์: ์๋ฒ๊ฐ ์ฌ์ฉ์ ์์์ ํด๋ผ์ด์ธํธ์๊ฒ JSON ํ์์ผ๋ก ์๋ตํ ๋.
{
"id": 1,
"name": "Kobe",
"email": "kobe@example.com"
}
3๏ธโฃ RESTful API์ HTTP ๋ฉ์๋์ ์์์ ๊ด๊ณ.
1๏ธโฃ GET
- ์์์ ์กฐํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์:
GET /users/1
์ id=1
์ธ ์ฌ์ฉ์๋ฅผ ์กฐํํ๋ ์์ฒญ์
๋๋ค.
2๏ธโฃ POST
- ์๋ก์ด ์์์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์:
POST /users
๋ ์๋ก์ด ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ ์์ฒญ์
๋๋ค.
- ์์ฒญ ๋ณธ๋ฌธ์๋ ์์ฑํ ์์์ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
3๏ธโฃ PUT
- ๊ธฐ์กด ์์์ ์
๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์:
PUT /users/1
์ id=1
์ธ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์
๋ฐ์ดํธํ๋ ์์ฒญ์
๋๋ค.
4๏ธโฃ DELETE
- ์์์ ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์:
DELETE /users/1
์ id=1
์ธ ์ฌ์ฉ์๋ฅผ ์ญ์ ํ๋ ์์ฒญ์
๋๋ค.
4๏ธโฃ RESTful API์ ์
๐ ์ฌ์ฉ์ ์์์ ๊ด๋ฆฌํ๋ RESTful API ์์.
1๏ธโฃ GET ์์ฒญ (๋ชจ๋ ์ฌ์ฉ์ ์กฐํ)
์๋ต
[
{"id": 1, "name": "Kobe", "email": "kobe@example.com"},
{"id": 2, "name": "Eric", "email": "eric@example.com"}
]
2๏ธโฃ POST ์์ฒญ (์ ์ฌ์ฉ์ ์์ฑ)
์์ฒญ ๋ณธ๋ฌธ.
{
"name": "Kobe",
"email": "kobe@example.com"
}
์๋ต.
3๏ธโฃ PUT ์์ฒญ (์ฌ์ฉ์ ์ ๋ณด ์
๋ฐ์ดํธ)
์์ฒญ ๋ณธ๋ฌธ
{
"name": "Kobe updated",
"email": "kobe.updated@example.com"
}
์๋ต
{
"id": 3,
"name": "Kobe updated",
"email": "kobe.updated@example.com"
}
4๏ธโฃ DELETE ์์ฒญ (์ฌ์ฉ์ ์ญ์ )
์๋ต.
{
"message": "User deleted successfully"
}
5๏ธโฃ RESTful API์ ์ฅ์ .
1๏ธโฃ ํ์ฅ์ฑ.
- RESTful API๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ, ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ฐํ ์์คํ
์ ์ค๊ณํ ์ ์์ต๋๋ค.
2๏ธโฃ ํ์คํ.
- HTTP ํ๋กํ ์ฝ์ ํ์ค์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ, ๋ค์ํ ํด๋ผ์ด์ธํธ์ ์ฝ๊ฒ ์ฐ๋์ด ๊ฐ๋ฅํฉ๋๋ค.
3๏ธโฃ ๊ฒฝ๋์ฑ.
- JSON ๊ฐ์ ๊ฒฝ๋ ํฌ๋งท์ ์ฌ์ฉํด ๋ฐ์ดํฐ ์ ์ก์ ์ต์ ํํ ์ ์์ต๋๋ค.
4๏ธโฃ ์บ์ฑ ๊ฐ๋ฅ.
- HTTP ์บ์ฑ ๋ฉ์ปค๋์ฆ์ ํตํด ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋คํธ์ํฌ ๋ถํ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
6๏ธโฃ ๊ฒฐ๋ก .
-
RESTful API๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์ํธ์์ฉ์ ์ผ๊ด์ฑ ์๊ณ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ API ์ค๊ณ ๋ฐฉ์์
๋๋ค.
- HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ์์์ CRUD ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ, ๋ฌด์ํ์ฑ, ์์ ๊ธฐ๋ฐ ์ ๊ทผ, ์ผ๊ด๋ ์ธํฐํ์ด์ค ๋ฑ์ REST ์์น์ ๋ฐ๋ฆ
๋๋ค.
- RESTful API๋ ๋ค์ํ ํด๋ผ์ด์ธํธ(๋ชจ๋ฐ์ผ, ์น ๋ฑ)์ ํต์ ํ ์ ์๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ฐํ ์์คํ
์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.