[BE] REST API
elice/study

[BE] REST API

1. REST (Representational State Transfer)

  • ์–ด๋–ค ์ž์›์— CRUD ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด URI๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ
  • HTTP URI๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•˜๊ณ , HTTP Method๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ
  • ๊ฐ ์š”์ฒญ์ด ์–ด๋–ค ๋™์ž‘์ด๋‚˜ ์ •๋ณด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ธ์ง€๋ฅผ ๊ทธ ์š”์ฒญ์˜ ๋ชจ์Šต ์ž์ฒด๋กœ ์ถ”๋ก  ๊ฐ€๋Šฅ

1-1. ๊ตฌ์„ฑ์š”์†Œ

1) ์ž์›(Resource) : HTTP URI

2) ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„(Verb) : HTTP Method (GET, POST, PUT(PATCH), DELETE)

3) ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„์˜ ๋‚ด์šฉ(Representations) : HTTP Message Payload (JSON, XML, RSS ๋“ฑ)

1-2. REST๊ฐ€ ์™œ ํ•„์š”ํ•œ๊ฐ€?

๊ฐ ์š”์ฒญ์˜ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด API๋ฅผ ์ œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ

1๏ธโƒฃ GET /deleteUserInfo/id?=3
2๏ธโƒฃ DELETE /users/3

์œ„์˜ ๋‘ ์š”์ฒญ์€ ๋ชจ๋‘ ํŠน์ • user์˜ ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๋Š” API ์ด์ง€๋งŒ, ์ฒซ ๋ฒˆ์งธ API๋Š” RESTfulํ•˜์ง€ ๋ชปํ•˜๋‹ค.

1-3. REST ํŠน์ง•

1) Uniform (์œ ๋‹ˆํผ ์ธํ„ฐํŽ˜์ด์Šค)

Uniform Interface๋Š” URI๋กœ ์ง€์ •ํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ํ†ต์ผ๋˜๊ณ  ํ•œ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ

2) Stateless (๋ฌด์ƒํƒœ์„ฑ)

REST๋Š” ๋ฌด์ƒํƒœ์„ฑ ์„ฑ๊ฒฉ์„ ๊ฐ–๋Š”๋‹ค. ๋‹ค์‹œ ๋งํ•ด ์ž‘์—…์„ ์œ„ํ•œ ์ƒํƒœ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์„ธ์…˜ ์ •๋ณด๋‚˜ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ๋ณ„๋„๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— API ์„œ๋ฒ„๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๋งŒ์„ ๋‹จ์ˆœํžˆ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. ๋•Œ๋ฌธ์— ์„œ๋น„์Šค์˜ ์ž์œ ๋„๊ฐ€ ๋†’์•„์ง€๊ณ  ์„œ๋ฒ„์—์„œ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•ด์ง„๋‹ค.

3) Cacheable (์บ์‹œ ๊ฐ€๋Šฅ)

REST์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” HTTP๋ผ๋Š” ๊ธฐ์กด ์›นํ‘œ์ค€์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋”ฐ๋ผ์„œ HTTP๊ฐ€ ๊ฐ€์ง„ ์บ์‹ฑ ๊ธฐ๋Šฅ์ด ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. HTTP ํ”„๋กœํ† ์ฝœ ํ‘œ์ค€์—์„œ ์‚ฌ์šฉํ•˜๋Š” Last-Modified ํƒœ๊ทธ๋‚˜ E-Tag๋ฅผ ์ด์šฉํ•˜๋ฉด ์บ์‹ฑ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

4) Self-descriptiveness (์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ)

REST API ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ๋„ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค.

5) Client-Server ๊ตฌ์กฐ

REST ์„œ๋ฒ„๋Š” API ์ œ๊ณต, ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋‚˜ ์ปจํ…์ŠคํŠธ(์„ธ์…˜, ๋กœ๊ทธ์ธ ์ •๋ณด)๋“ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๊ฐ๊ฐ์˜ ์—ญํ• ์ด ํ™•์‹คํžˆ ๊ตฌ๋ถ„๋˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์—์„œ ๊ฐœ๋ฐœํ•ด์•ผ ํ•  ๋‚ด์šฉ์ด ๋ช…ํ™•ํ•ด์ง€๊ณ  ์„œ๋กœ๊ฐ„ ์˜์กด์„ฑ์ด ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

6) ๊ณ„์ธตํ˜• ๊ตฌ์กฐ

REST ์„œ๋ฒ„๋Š” ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ณด์•ˆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์•”ํ˜ธํ™” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•ด ๊ตฌ์กฐ์ƒ์˜ ์œ ์—ฐ์„ฑ์„ ๋‘˜ ์ˆ˜ ์žˆ๊ณ  PROXY, ๊ฒŒ์ดํŠธ์›จ์ด ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์ค‘๊ฐ„๋งค์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

2. API (Application Programming Interface)

์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด๋กœ๋ถ€ํ„ฐ ์ง€์ •๋œ ํ˜•์‹์œผ๋กœ ์š”์ฒญ, ๋ช…๋ น์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ

์„œ๋น„์Šค๋‚˜ ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ๋ฏธ๋ฆฌ ์ •ํ•ด์ง„ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ทœ์•ฝ

 

3. REST API

REST ์›์น™์„ ์ ์šฉํ•˜์—ฌ ์„œ๋น„์Šค API๋ฅผ ์„ค๊ณ„ํ•œ ๊ฒƒ

HTTP ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์–ด๋–ค URI์— ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ์ง€ (+๊ธฐํƒ€) ๋„๋ฆฌ ์“ฐ์ด๋Š” ์ผ์ข…์˜ ํ˜•์‹

3-1. REST API์˜ ํ•ต์‹ฌ

1) URI๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

  • ๋ฆฌ์†Œ์Šค ๋ช…์€ ๋™์‚ฌ๊ฐ€ ์•„๋‹Œ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
/students/1
  • ๋ฆฌ์†Œ์Šค๋Š” Collection๊ณผ Document๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
/locations/seoul/schools/3

์ด ๋•Œ, Collection์€ ๋ณต์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ locations๋Š” Collection์„, seoul์€ Document๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

2) ๊ทธ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP์˜ Method๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

  • GET์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•œ๋‹ค. (ํ•™์ƒ ๋ชฉ๋ก ์กฐํšŒ)
GET /students
  • POST๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (ํ•™์ƒ ์ƒ์„ฑ)
POST /students
  • PUT์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. (1๋ฒˆ ํ•™์ƒ ์ •๋ณด ์—…๋ฐ์ดํŠธ)
PUT /students/1
  • DELETE๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•œ๋‹ค. (1๋ฒˆ ํ•™์ƒ ์‚ญ์ œ)
DELETE /students/1

3-2. ์ž˜๋ชป๋œ REST ์‚ฌ์šฉ

GET/POST์˜ ๋ถ€์ ํ•ฉํ•œ ์‚ฌ์šฉ : ๊ธฐ์กด์˜ ์กฐํšŒ/์ƒ์„ฑ ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

์ž์ฒด ํ‘œํ˜„์ ์ด์ง€ ์•Š์Œ : REST์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜์ธ ์ž์ฒดํ‘œํ˜„์„ฑ์—์„œ ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋กœ, ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

HTTP ์‘๋‹ต์ฝ”๋“œ ๋ฏธ์‚ฌ์šฉ : ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์˜ ์ƒํƒœ์ฝ”๋“œ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ

 

 

 

์ฐธ๊ณ 

https://velog.io/@ellyheetov/REST-API

https://velog.io/@nawhew/%EB%82%B4%EA%B0%80-%EB%A7%8C%EB%93%A0-REST-API%EB%8A%94-%EC%A7%84%EC%A7%9C-REST%ED%95%9C%EA%B0%80

https://www.youtube.com/watch?v=iOueE9AXDQQ