Search
๐Ÿ“‡

REST , REST API, RESTful (1)

ํƒœ๊ทธ
backend study

REST ๋ž€

โ€ข
โ€œRepresentational State Transferโ€์˜ ์•ฝ์ž
โ€ข
์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์˜๋ฏธ
โ€ข
๊ธฐ๋ณธ์ ์œผ๋กœ ์›น์˜ ๊ธฐ์กด ๊ธฐ์ˆ ๊ณผ HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›น์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ
โ€ข
Client์™€ Server ์‚ฌ์ด์˜ ํ†ต์‹  ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜
HTTP URI๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ

REST ์‚ฌ์šฉ ์ด์œ 

โ€ข
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ถ„๋ฆฌ ๋ฐ ํ†ตํ•ฉ
โ€ข
๋‹ค์–‘ํ•œ ํด๋ผ์ด์–ธํŠธ์˜ ๋“ฑ์žฅ

REST ๊ตฌ์„ฑ ์š”์†Œ

1.
์ž์›: URI
โ€ข
๋ชจ๋“  ์ž์›์— ๊ณ ์œ ํ•œ ID๊ฐ€ ์กด์žฌํ•˜๊ณ , ์ด ์ž์›์€ Server์— ์กด์žฌ
โ€ข
์ž์›์„ ๊ตฌ๋ณ„ํ•˜๋Š” ID๋Š” โ€˜/users/:user_id์™€ ๊ฐ™์€ HTTP URI
โ€ข
Client๋Š” URI๋ฅผ ์ด์šฉํ•ด์„œ ์ž์›์„ ์ง€์ •ํ•˜๊ณ  ํ•ด๋‹น ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)์— ๋Œ€ํ•œ ์กฐ์ž‘์„ Server์— ์š”์ฒญ
2.
ํ–‰์œ„: HTTP Method
โ€ข
HTTP ํ”„๋กœํ† ์ฝœ์˜ Method๋ฅผ ์‚ฌ์šฉ
3.
ํ‘œํ˜„
โ€ข
Client๊ฐ€ ์ž์›์˜ ์ƒํƒœ์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ์š”์ฒญํ•˜๋ฉด Server๋Š” ์ด์— ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ณด๋ƒ„
โ€ข
REST์—์„œ ํ•˜๋‚˜์˜ ์ž์›์€ JSON, XML, TEXT, RSS๋“ฑ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ Representation์œผ๋กœ ๋‚˜ํƒ€๋ƒ„

REST API๋ž€

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

REST API ์„ค๊ณ„ ๊ธฐ๋ณธ ๊ทœ์น™

1.
URI๋Š” ์ •๋ณด์˜ ์ž์›์„ ํ‘œํ˜„ํ•ด์•ผ ํ•จ
โ€ข
์ž์›์€ ๋™์‚ฌ๋ณด๋‹ค๋Š” ๋ช…์‚ฌ๋ฅผ, ๋Œ€๋ฌธ์ž๋ณด๋‹ค๋Š” ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉ
โ€ข
์ž์›์˜ ๋„ํ๋จผํŠธ ์ด๋ฆ„์œผ๋กœ๋Š” ๋‹จ์ˆ˜ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉ
โ€ข
์ž์›์˜ ์ปฌ๋ ‰์…˜ ์ด๋ฆ„์œผ๋กœ๋Š” ๋ณต์ˆ˜ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉ
2.
์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP Method๋กœ ํ‘œํ˜„
โ€ข
URI์— HTTP Method๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋จ
โ€ข
URI์— ํ–‰์œ„์— ๋Œ€ํ•œ ๋™์‚ฌ ํ‘œํ˜„์ด ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋จ
โ€ข
๊ฒฝ๋กœ ๋ถ€๋ถ„ ์ค‘ ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์€ ์œ ์ผํ•œ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด
3.
์Šฌ๋ž˜์‹œ ๊ตฌ๋ถ„์ž(/)๋Š” ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋ƒ„
4.
URI ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋กœ ์Šฌ๋ž˜์‹œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Œ
5.
ํ•˜์ดํ”ˆ์€ URI ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š”๋ฐ ์‚ฌ์šฉ
6.
ํŒŒ์ผํ™•์žฅ์ž๋Š” URI์— ํฌํ•จํ•˜์ง€ ์•Š์Œ (Accept header๋ฅผ ์‚ฌ์šฉ)
โ€ข
ex) GET /users/1/photo HTTP/1.1 Host: xxxxx
โ€ข
Accept: image/jpg (o)

RESTful API ์‚ฌ์šฉ

1. Path parameters

โ€ข
๋ฐ์ดํ„ฐ ๋“ฑ๋ก ์‹œ POST ๋นผ๊ณ  ๋‹ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ
โ€ข
๋ฐ์ดํ„ฐ ๋“ฑ๋ก ์‹œ POST ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ „์ด๋ผ ID๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ
โ€ข
์›ํ•˜๋Š” ์กฐ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋“ค ํ˜น์€ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ ์ ์ ˆ
โ€ข
ex) GET /users/1

2. Query String

โ€ข
์ข€ ๋” ๋ณต์žกํ•œ ์กฐ๊ฑด์„ ์ค˜์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฌผ์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ
โ€ข
GET์—๋งŒ ์“ฐ์ธ๋‹ค
โ€ข
filtering, sorting, searching์— ์ ์ ˆ
โ€ข
ex) GET /producs?offest=0&limit=100

Status Code

โ€ข
์ƒํ™ฉ์— ๋งž๋Š” status ์ฝ”๋“œ๋ฅผ ์ „์†กํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”, ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ์˜๋ฏธ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š”์ง€ ์•Œ์•„๋‘ฌ์•ผ ํ•จ