2024.12.14 - [๐ป/CS] - [CS/ API] API ๋?
[CS/ API] API ๋?
ํ๋ก๊ทธ๋๋ฐ ๊ณต๋ถ๋ฅผ ํ๋ฉฐ ์์์ด ๋ค์ด๋ณด๊ฒ ๋๋๊ฒ ๋ฐ๋ก ' API ' ๋ค. API์ ๋ํด ๋ช ํํ๊ฒ ์ ๋ฆฌํด๋ณด์. โบ๏ธ 1. API ๋?: Application Programming Interface ์ฝ๊ฒ ๋งํด ' ์ํธ๊ฐ์ ์ํต์ ์ํ ์ ์ ' ์ด๋ผ๊ณ
soonybutter.tistory.com
์ ๋ฒ์ API์ ๊ฐ๋
์ ๋ํด ๊ฐ๋ตํ ์ ๋ฆฌ ํ๋ค.
์ด๋ฒ์๋ REST API, ์ ํํ๊ฒ๋ RESTful API์ ๋ํด ์ ๋ฆฌํด๋ณด์. โบ๏ธ

1. RESTful API ๋?
RESTful API๋ ๋ค์ํ ํ์๋ค ์ค ์ค๋๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ฒ์ด๋ค.
RESTful API๋ A๊ฐ ์ด๋ค๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด, B๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์๋ตํ ์ง ์ง์ ํด๋์ ๋ค์ํ ํ์ ์ค ํ๋์ด๋ค.
์ ์ด ๋ฐฉ์์ API๊ฐ ์ธ๊ธฐ๊ฐ ๋ง๊ณ ์ข์ ๋ฐฉ์์ด๋ผ๋ ๊ฒ์ผ๊น?
์ด๋ ํ ์ธํฐํ์ด์ค์ ์๋ฒ๊ฐ RESTful API ํ์์ API๋ฅผ ํตํด ์ํต์ ํ๋ค๊ณ ํ๋ฉด,
์ด๋ค์ ํฌ๊ฒ 'CRUD'๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
Create : ์ ๋ณด๋ฅผ ์์ฑํด์ ๋ฃ๋ ๊ฒ (์ ๋ณด์ถ๊ฐ)
Read : ์กฐํํ๋ ๊ฒ
Update : ํ์กดํ๋ ํน์ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ
Delete : ํน์ ์ ๋ณด๋ฅผ ์ญ์ ํ๋ ๊ฒ
CRUD์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ด์ ์ ๊ฒ์๋ฌผ์ ์ฐธ๊ณ ํ์. โบ๏ธ
2024.10.31 - [๐ป/Server] - [์๋ฒ] CRUD ๋? + CRUD์ REST
[์๋ฒ] CRUD ๋? + CRUD์ REST
1. CRUD ๋?Create, Read, Update, Delete์ ์ฝ์ด๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ ์์คํ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ์๋ฏธํ๋ค. CRUD ๊ฐ๋ ์ ์น์์คํ ๋ฟ๋ง ์๋๋ผ ๊ฑฐ์ ๋ชจ๋ ์์คํ ์์ ์ ์ฉ๋๋ค. 2. DB์
soonybutter.tistory.com
2. RESTful API ํน์ง1- URI
๋ค์ RESTful API๋ก ๋์์์,
์ด 4๊ฐ์ง ์์
์ ์ํ ์์ฒญ(Request)๋ค์ RESTfulํ ์์ฒญ์ผ๋ก ๋ณด๋ด๊ธฐ ์ํ ๐URI์ ์์ฑํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
๐
URI : Uniform Resource Identifier, ํตํฉ์์์๋ณ์
์ธํฐ๋ท์ ์๋ ์์์ ๋ํ๋ด๋ ์ ์ผํ ์ฃผ์. ์ธํฐ๋ท์ ์กด์ฌํ๋ ๊ฐ์ข
์ ๋ณด๋ค์ ์ ์ผํ ์ด๋ฆ์ด๋ ์์น๋ฅผ ํ์ํ๋ ์๋ณ์์ด๋ค.
URL: Uniform Resource Locator
์น์ฃผ์์ด๋ค. ์ปดํจํฐ ๋คํธ์ํฌ ์์์ ๋ฆฌ์์ค๊ฐ ์ด๋์๋์ง ์๋ ค์ฃผ๊ธฐ ์ํ ๊ท์ฝ์ด๋ค.

๋ค์ ์์ API๋ฅผ ์์ฒญํ ํ์์ ์ดํด๋ณด๋ฉด,
๋ชจ๋ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํด ์์
์ ์์ฒญํ๊ณ ์๋ค.
HTTP๋ RESTful API์ ํ์์์๋ ์๋์ง๋ง, RESTful API์ ์กฐ๊ฑด์ ๊ตฌํํ๊ธฐ์ ์ฉ์ดํจ์ผ๋ก,
ํ์
์์๋ ์ฃผ๋ก HTTP๊ฐ ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
์์ ์์์์
v1์ api์ ๋ฒ์ ์ ๋ณด๋ฅผ ๋ํ๋ด๊ณ ์๋ค.
๊ฐ uri์ ๋ถํ๊ธ์จ์ books๋ ๊ฐ ์์ฒญ์ด ์ด๋ค ๋ฐ์ดํฐ์ ๊ดํ ๊ฒ์ธ์ง๋ฅผ ๋ช
์ํ๊ณ ์๋ค.
์ฆ,
๋ง์ฝ API ๊ฐ REST์์น์ ์ ์ง์ผ ๋ง๋ค์ด์ก๋ค๋ฉด
๊ฐ ์์ฒญ์ ๋ฉ์๋(REST)์ URI ์์ฒด๊ฐ ๊ทธ๊ฒ์ ๋ชฉ์ ์ ๋ช
ํํ ๋ํ๋ด๊ธฐ ๋๋ฌธ์
๊ฐ๋ฐ์๋ ๋ค๋ฅธ ํ๊ณผ ํ์
์ ํ๊ฑฐ๋, ์ด๋ค API๋ฅผ ์ฒ์์ผ๋ก ์ฌ์ฉํด์ผํ ๋์๋ ์ API ์ ์ฌ์ฉ๋ฒ์ ์ฝ๊ฒ ์ตํ ์ ์๋ค.
RESTful API์์์ ์์ฒญ๊ณผ ์๋ต์์๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐํํ์ด ๊ฐ๋ฅํ๋ฉด์๋ ๊ฐ๋ฒผ์ด JSON์ด ๋ง์ด ์ฌ์ฉ๋๋ค.
(JSON์ ๋ํด์๋ ์ถํ์ ๊ธฐํ๊ฐ ๋๋ฉด ์ ๋ฆฌํ ์์ ์ด๋ค.โบ๏ธ)
๊ฐ๊ฐ์ URI ๋ณ๋ก ์ด๋ค ์ ๋ณด๋ฅผ ๋ํ๋ด๋์ง ๋ช๊ฐ์ง URI๋ฅผ ํตํด ์์๋ณด์.
CASE 1.
์์๋ก GET ๋ฐฉ์์ผ๋ก API๋ฅผ ์์ฒญํ์๋ค๊ณ ํ๋ค๋ฉด,
์ด๋ ๋์ ์ ๋ณด๋ฅผ ๋ชจ๋ ๋ถ๋ฌ๋ฌ๋ผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์๋์ URI์์๋ ๊ฑฐ๊ธฐ์ ๋๋ถ์ด 'status=available'์ด๋ผ๋ ์กฐ๊ฑด์ ๋ช
์ํ๋ค.
์ด๋ฌํ ์กฐ๊ฑด์ ๋ช
์ํจ์ผ๋ก์ status๊ฐ available์ธ ์ํ์ ์ฑ
๋ค๋ง ํ์ธํ๋๋ก ํ๋ ๊ฒ์ด๋ค.

CASE2.
์ค๋ฌด์์๋ URI์ ํ์ด์ง์ ๋ํ ์กฐ๊ฑด์ ๋ฃ์ด๋ ์ผ๋ก์
ํ ํ์ด์ง์ 10๊ถ์ฉ ๋จ๊ฒ ํด๋ฌ๋ผ๋ ์กฐ๊ฑด์ ๋ถ์ฌ
ํ ํ์ด์ง๋ด ํ์๋ ๋ฐ์ดํฐ์ ์๋ฅผ ์ ํํ๋๋ฐ, ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๊ณผ์ ์ผ๋ก๋ถํฐ ๊ณผ๋ถํ๋ฅผ ๋ฐฉ์งํ๋ค.

CASE3.
PUT๊ณผ PATCH๋ ๋ชจ๋ Update์ ํด๋นํ๋ค.

PUT์ ์ ๋ถ๋ฅผ ๊ฐ์ ์๋๋ค.

๋ฐ๋ฉด, PATCH๋ ๋ถ๋ถ๋ง ์์ ํ๋ค๋ ์ฐจ์ด๊ฐ ์๋ค.

3.RESTful API ํน์ง2 - HATEOAS
RESTful API์์ ๊ถ์ฅ๋๋ ๋๋ค๋ฅธ ์์น์ HATEOAS ์ด๋ค.
Hypermedia
As
The
Engine
Of
Application State
์ด๋ ๊ฐ ์์ฒญ์ ์๋ต์, ๊ฐ์ฉํ ๋ค๋ฅธ ์์ฒญ๋ค์ ์ ๋ณด๋ฅผ ํฌํจ์ํค๋ ๊ฒ์ด๋ค.
์ด ๋ฆฌ์์ค์ ๋ํด ์ด๋ฌํ ๊ธฐ๋ฅ๋ค๋ ์ด์ ๊ฐ์ด ์์ฒญํ ์ ์๋ค๊ณ ์ฒจ๋ถํด์ฃผ๋ ๊ฒ์ด๋ค!

์ด ๋งํฌ ์ ๋ณด๋ค์ ํตํด ๊ฐ๋ฐ์๋ API๋ฌธ์๋ฅผ ๋ค ๋ค์ ธ๋ณด์ง ์์๋
๋ค์์ ์ด๋ค ์์ฒญ์ ๋ณด๋ผ ์ ์๋์ง ๋ณผ ์ ์์ผ๋ฉฐ,
์ด ๋ถ๋ถ์ API์ ์ธ๋ถ์ฌํญ์ด ๋ณ๊ฒฝ๋๋๋ผ๋, ํด๋ผ์ด์ธํธ๋ ์ด ์ ๋ณด๋ฅผ ์ฐธ์กฐํ๊ฒ ๋ง๋ค๋ฉด ํด๋ผ์ด์ธํธ์ ์ฝ๋๋ฅผ ๊ณ ์น ํ์๋ ์์ด์ง๋ ๊ฒ์ด๋ค.
๊ฐ API๋ HATEOAS๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด ์ข๋ค.
4. RESTful API ํน์ง3 - ์๋ต์ ์ํ์ฝ๋
: ์๋ฒ์ ์๋ต์๋ ์์ฒญ์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ฃผ๋ ์ํ์ฝ๋๊ฐ ๋ด๊ฒจ์จ๋ค.
2XX : Success
4XX : Client Error (URI๊ฐ ์๋ชป๋จ or ๊ถํ ์ธ์ ์์ฒญ์ ํจ . ์ฆ, ํด๋ผ์ด์ธํธ์ ์์ฒญ ์๋ชป)
5XX : Server Error
ํฌ๊ฒ๋ ์ด๋ ๊ฒ ๊ตฌ๋ถํ ์ ์์ผ๋ฉฐ, ์์ธํ ์ํ์ฝ๋๋ ์ด์ ์ ๊ธ์ ์ฐธ๊ณ ํ์.โบ๏ธ
2024.10.29 - [๐ป/Network] - [HTTP] Http ์ํ ์ฝ๋ (Http Status Code)
[HTTP] Http ์ํ ์ฝ๋ (Http Status Code)
Http ์ํ ์ฝ๋ -> ํน์ HTTP ์์ฒญ์ด ์ ์์ ์ผ๋ก ์๋ฃ๋์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ 3์๋ฆฌ ์ซ์ ์ฝ๋์ด๋ค.100๋ฒ ๋ถํฐ ์์ํด์ 500๋ฒ๋๊น์ง ํฌ๊ฒ ์ด 5๊ฐ์ ํ์ ์ผ๋ก ๋๋ ์ ์๋ค.์ํ ์ฝ๋๋ ํญ์ ์ํ๋ฉ
soonybutter.tistory.com
5. RESTful API ํน์ง4- Stateless
๋ํ Restful API๋ 'Stateless' ํน์ฑ์ ๊ฐ์ง๋ค.
Stateless๋ ํด๋ผ์ด์ธํธ์ ์ํ ์ ๋ณด๊ฐ ์๋ฒ์ ์ ์ฅ๋์ง ๋ง์์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์ฆ, ์๋ฒ๋ ํฌ๋ผ์ด์ธํธ์ ๋ํด ์๋ฌด๊ฒ๋ ๊ธฐ์ตํ๋ฉด ์๋๋ค๋ ๊ฒ์ด๋ค.
์ด ํน์ฑ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ๋ช๋ฒ์งธ ๋ฐ๋ณตํด์ ๋ณด๋ด๋ ์ง ๊ฐ์, ํ์ํ ๋ด์ฉ์ ๋งค๋ฒ ๋ชจ๋ ํฌํจํ๊ณ ์์ด์ผํ๋ค.
ํด๋ผ์ด์ธํธ : ์๊น ๋ด๊ฐ ์์ฒญํ๋๊ฑฐ ๋ค์ ์์ฒญํ๋ค~ ํด์ค ~~
์๋ฒ : ์๋จ! ๋ค์ ์์ฒญํด์ฃผ์ธ์.
ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์๋ก๋ฅผ ๊ธฐ์ตํด์๋ ์๋๋ค.ํ์ง๋ง, ๊ฐ๊ฐ ๋ณธ์ธ์ด ์ด๋ค ์์ฒญ์ ๋ณด๋๋์ง ๋, ์ด๋ค ์๋ต์ ๋ณด๋๋์ง, ์ด๋ค ์๋ต์ ๋ฐ์๋์ง๋ ๊ธฐ์ตํด๋๋๊ฒ ์ข๋ค. -> ์บ์ฑ(Caching)
ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ค ์์ฒญ์ ๋ํ ์๋ต์ ๋ณธ์ธ์๊ฒ ์บ์ฑํด๋๋ฉด, ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋๋ง๋ค ์์ฒญ์ ๋ณด๋ด์ง ์์๋ ๋๊ณ ,์๋ฒ๋ ํน์ ์์ฒญ์ ๋ํด ์๋ตํ ๊ฒ์ ์บ์ฑํด๋๋ฉด, ๊ฐ์ ์์ฒญ์ด ๋ค์ด์์๋ ๋ DB์์ ์ ๋ณด๋ฅผ ์บ๋ด์ง ์์๋ ๋๋ค๋ ๊ฒ์ด๋ค.
* ์ ํ๋ธ ์ํํ ์ฝ๋ฉ์ฌ์ ๋- ์์ ์ฐธ๊ณ
'๐ป > CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS/ API] API ๋? (0) | 2024.12.14 |
---|---|
[WEB/๋คํธ์ํฌ] GET๊ณผ POST ์ ์ฐจ์ด (0) | 2024.07.31 |
[WEB] ์ ์ ์น ํ์ด์ง์ ๋์ ์น ํ์ด์ง (0) | 2024.01.22 |