Tiny Bunny
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/CS

[CS/API] RESTful API ๋ž€? +URI, HATEOAS

by soonybutter 2024. 12. 14.
728x90

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
์›น์ฃผ์†Œ์ด๋‹ค. ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์–ด๋””์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ๊ทœ์•ฝ์ด๋‹ค.
 


 
 
 

URI ์˜ˆ์‹œ

 

๋‹ค์‹œ ์œ„์˜ 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
 
์ด๋Š” ๊ฐ ์š”์ฒญ์˜ ์‘๋‹ต์—, ๊ฐ€์šฉํ•œ ๋‹ค๋ฅธ ์š”์ฒญ๋“ค์˜ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.
์ด ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค๋„ ์ด์™€ ๊ฐ™์ด ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ฒจ๋ถ€ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค!

HATEOAS ์˜ˆ์‹œ

์ด ๋งํฌ ์ •๋ณด๋“ค์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” 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์—์„œ ์ •๋ณด๋ฅผ ์บ๋‚ด์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
 
 
 
 
 
 
 
 
 
 
 
* ์œ ํŠœ๋ธŒ ์–„ํŒํ•œ ์ฝ”๋”ฉ์‚ฌ์ „๋‹˜- ์˜์ƒ ์ฐธ๊ณ 

728x90

TOP

Designed by ํ‹ฐ์Šคํ† ๋ฆฌ