Search
Duplicate

REST API

์ƒ์„ฑ์ผ
2023/03/27 00:42
ํƒœ๊ทธ
WEB

REST API

ย REST ๋ž€?

Representational State Transfer์˜ ์•ฝ์ž๋กœ, 2000๋…„๋„์— ๋กœ์ด ํ•„๋”ฉ(Roy Fielding)์— ์˜ํ•ด ์›น(HTTP) ์„ค๊ณ„์˜ ์šฐ์ˆ˜์„ฑ์— ๋น„ํ•ด ์ œ๋Œ€๋กœ ์‚ฌ์šฉ๋˜์–ด์ง€์ง€ ๋ชปํ•˜๋Š” ๋ชจ์Šต์— ์•ˆํƒ€๊นŒ์›Œํ•˜๋ฉฐ ์›น์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜๋กœ์จ REST๋ฅผ ๋ฐœํ‘œํ•˜์˜€๋‹ค.
์ž์›์„ ์ด๋ฆ„(์ž์›์˜ ํ‘œํ˜„)์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์ž์›(resource)์˜ ํ‘œํ˜„(representation)์— ์˜ํ•œ ์ƒํƒœ ์ „๋‹ฌ์„ ๋œปํ•œ๋‹ค.

ย REST์˜ ๊ตฌ์„ฑ

ย ์ž์› (Resource) - URI

โ€ข
๋ชจ๋“  ์ž์›์—๋Š” ๊ณ ์œ ํ•œ ID๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด ์ž์›์€ Server์— ์กด์žฌํ•œ๋‹ค.
โ€ข
์ž์›์„ ๊ตฌ๋ณ„ํ•˜๋Š” ID๋Š” โ€˜/exgroups/:exgroup_idโ€™ ์™€ ๊ฐ™์€ HTTP URI์ด๊ณ ,
โ€ข
Client๋Š” URI๋ฅผ ์ด์šฉํ•ด ์ž์›์„ ์ง€์ •ํ•˜๊ณ  ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)์— ๋Œ€ํ•œ ์กฐ์ž‘์„ Server์— ์š”์ฒญํ•œ๋‹ค.

ย ํ–‰์œ„ (Method) - HTTP Method

โ€ข
HTTP Method๋“ค์„ ์‚ฌ์šฉํ•จ

ย ํ‘œํ˜„ (Representation)

โ€ข
Client์™€ Server๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ํ˜•ํƒœ๋กœ JSON, XML, RSS ๋“ฑ์ด ์žˆ๋‹ค.
โ€ข
์ œ์ผ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฑด JSON, XML

ย REST์˜ ํŠน์ง•

1.
Server-Client (์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ)
โ€ข
์ž์›์ด ์žˆ๋Š” ์ชฝ์ด ์„œ๋ฒ„, ์ž์›์„ ์š”์ฒญํ•˜๋Š” ์ชฝ์ด ํด๋ผ์ด์–ธํŠธ
โ—ฆ
REST ์„œ๋ฒ„๋Š” API๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ ๋ฐ ์ €์žฅ
โ—ฆ
ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ, context(์„ธ์…˜, ๋กœ๊ทธ์ธ ์ •๋ณด)๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌ
โ—ฆ
์—ญํ• ์„ ํ™•์‹คํžˆ ๊ตฌ๋ถ„ํ•จ์œผ๋กœ์จ ์„œ๋กœ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ค„์ž„
2.
Stateless (๋ฌด์ƒํƒœ)
โ€ข
HTTP ํ”„๋กœํ† ์ฝœ์€ Stateless ํ”„๋กœํ† ์ฝœ์ด๋ฏ€๋กœ REST๋„ ๋ฌด์ƒํƒœ์„ฑ์„ ๊ฐ€์ง
โ—ฆ
๋ฌด์ƒํƒœ์„ฑ์ด๋ž€? ์ƒํƒœ์ •๋ณด(์„ธ์…˜ ์ •๋ณด, ์ฟ ํ‚ค ์ •๋ณด)๋ฅผ ๋ณ„๋„๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Œ
โ€ข
ํด๋ผ์ด์–ธํŠธ์˜ context๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•˜์ง€ ์•Š์Œ โ†’ ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•ด์ง
โ€ข
์„œ๋ฒ„๋Š” ๊ฐ๊ฐ์˜ ์š”์ฒญ์„ ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•จ
โ—ฆ
๊ฐ API ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๋งŒ์„ ๋‹จ์ˆœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ์ผ๊ด€์„ฑ์ด ์ƒ๊ธฐ โ†’ ์„œ๋น„์Šค์˜ ์ž์œ ๋„๊ฐ€ ๋†’์•„์ง
3.
Cachable (์บ์‹œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ)
โ€ข
์›น ํ‘œ์ค€ HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด์˜ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์—†์Œ
โ—ฆ
HTTP๊ฐ€ ๊ฐ€์ง„ ํŠน์ง• ์ค‘์— ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•˜๊ณ  ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ
โ€ข
๋Œ€๋Ÿ‰์˜ ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
4.
Layered-System(๊ณ„์ธต ๊ตฌ์กฐ)
โ€ข
REST ์„œ๋ฒ„๋Š” ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Œ
โ—ฆ
๋ณด์•ˆ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ, ์•”ํ˜ธํ™” ๋“ฑ์„ ์œ„ํ•œ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ
โ—ฆ
Proxy, Gateway์™€ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์ค‘๊ฐ„๋งค์ฒด ์‚ฌ์šฉ๊ฐ€๋Šฅ
5.
Uniform Interface (์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ)
โ€ข
URI๋กœ ์ง€์ •ํ•œ ์ž์›์— ๋Œ€ํ•œ ์š”์ฒญ์„ ํ†ต์ผ์‹œํ‚ค๊ณ , ํ•œ์ •์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ์˜๋ฏธํ•จ
โ€ข
HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์— ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (ํŠน์ • ์–ธ์–ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š์Œ)
6.
Self-Descriptiveness (์ž์ฒด ํ‘œํ˜„)
โ€ข
์š”์ฒญ ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ์ด๋‹ค.

ย REST API ์˜ ์ •์˜

โ€ข
REST์˜ ํŠน์ง•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค API๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ

ย REST API ์˜ ํŠน์ง•

โ€ข
REST API๋Š” ๊ฐ ์š”์ฒญ์ด ์–ด๋–ค ๋™์ž‘์ด๋‚˜ ์ •๋ณด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ธ์ง€๋ฅผ ์š”์ฒญ์˜ ๋ชจ์Šต ์ž์ฒด๋กœ ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.
โ—ฆ
ex. POSTโ€ฆ/content โ†’ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•˜๋Š” ์š”์ฒญ์ด๊ตฌ๋‚˜?

ย REST API ๋””์ž์ธ ๊ฐ€์ด๋“œ

1.
URI๋Š” ์ •๋ณด์˜ ์ž์›์„ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
2.
์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP Method (GET, POST, PUT, PATCH, DELETE)๋กœ ํ‘œํ˜„ํ•œ๋‹ค.

ย REST API ์„ค๊ณ„ ๊ทœ์น™

โ€ข
RESTful์€ REST์˜ ์„ค๊ณ„ ๊ทœ์น™์„ ์ž˜ ์ง€์ผœ์„œ ์„ค๊ณ„๋œ API๋ฅผ RESTfulํ•œ API๋ผ๊ณ  ํ•œ๋‹ค.
โ€ข
REST์˜ ์›๋ฆฌ๋ฅผ ์ž˜ ๋”ฐ๋ฅด๋Š” ์‹œ์Šคํ…œ โ†’ RESTful ํ•˜๋‹ค.

ย ref)