REST, REST API, RESTful

๋‹คํ˜œยท2022๋…„ 4์›” 20์ผ
0

Web

๋ชฉ๋ก ๋ณด๊ธฐ
5/5
post-thumbnail

๐Ÿ”— REST


โœ… REST๋ž€?

  • Representational State Transfer์˜ ์•ฝ์ž๋กœ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ๊ทธ๋žจ ์•„ํ‚คํ…์ณ์˜ ํ•œ ํ˜•์‹.

  • ์ž์›์„ ์ด๋ฆ„์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ด๋‹น resource์˜ ์ƒํƒœ(์ •๋ณด)๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์„ ์˜๋ฏธ.

  • REST๋Š” ์›น์˜ ๊ธฐ์กด ๊ธฐ์ˆ ๊ณผ HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ธฐ ๋Œ€๋ฌธ์— ์›น์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„ํ‚คํ…์ณ ์Šคํƒ€์ผ.

โœ… REST์˜ ์ •์˜

HTTP URI๋ฅผ ํ†ตํ•ด ์ž์›์„ ๋ช…์‹œํ•˜๊ณ  HTTP Method(POST, GET, PUT, DELETE ๋“ฑ)๋ฅผ ํ†ตํ•ด
ํ•ด๋‹น ์ž์›์— ๋Œ€ํ•œ CRUD Operation์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ.

  • ์›น ์‚ฌ์ดํŠธ์˜ ๋ชจ๋“  ์ž์›์— ๊ณ ์œ ํ•œ ID์ธ HTTP URI๋ฅผ ๋ถ€์—ฌ.
  • CRUD Operation
    • Create : ์ƒ์„ฑ (POST)
    • Read : ์กฐํšŒ (GET)
    • Update : ์ˆ˜์ • (PUT)
    • Delete : ์‚ญ์ œ (DELETE)
    • HEAD : header ์ •๋ณด ์กฐํšŒ (HEAD)

โœ… REST์˜ ๊ตฌ์„ฑ์š”์†Œ

โœ” ์ž์› (Resource) - URI
โœ” ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„ (Verb) - Http Method
โœ” ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„์˜ ๋‚ด์šฉ (Representations) : HTTP Message Pay Load

  • Resource : URI

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

    • HTTP ํ”„๋กœํ† ์ฝœ์˜ Method(POST, GET, PUT, DELETE)๋ฅผ ์‚ฌ์šฉ.
  • Representations : HTTP Message Pay Load

    • Client๊ฐ€ ์ž์›์˜ ์ƒํƒœ(์ •๋ณด)์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ์š”์ฒญํ•˜๋ฉด Server๋Š” ์ด์— ์ ์ ˆํ•œ ์‘๋‹ต์„ ๋ณด๋ƒ„.
    • REST์—์„œ ํ•˜๋‚˜์˜ ์ž์›์€ JSON, XML, TEXT, RSS ๋“ฑ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ํ‘œํ˜„์œผ๋กœ ๋‚˜ํƒ€๋‚ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • JSON ์ด๋‚˜ XML์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ .

โœ… REST์˜ ํŠน์ง•


Server-Client (์„œ๋ฒ„-ํด๋ผ์ด์–ธํŠธ ๊ตฌ์กฐ)

  • REST Server์™€ ํด๋ผ์ด์–ธํŠธ๋Š” ๊ฐ๊ฐ์˜ ์—ญํ• ์ด ๋…๋ฆฝ๋˜์–ด ์˜์กด์„ฑ์ด ๋‚ฎ์•„์•ผ ํ•จ.
  • ์žˆ๋Š” ์ชฝ์ด Server, ์ž์›์„ ์š”์ฒญํ•˜๋Š” ์ชฝ์ด Client๊ฐ€ ๋จ.
  • REST Server : API๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ ๋ฐ ์ €์žฅ์„ ์ฑ…์ž„์ง.
  • Client : ์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋‚˜ context(์„ธ์…˜, ๋กœ๊ทธ์ธ ์ •๋ณด)๋“ฑ์„ ์ง์ ‘ ๊ด€ํžˆ๋ผ๊ณ  ์ฑ…์ž„์ง.

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

  • HTTP ํ”„๋กœํ† ์ฝœ์€ Stateless ํ”„๋กœํ† ์ฝœ์ด๋ฏ€๋กœ REST ๋˜ํ•œ ๋ฌด์ƒํƒœ์„ฑ์„ ๊ฐ€์ง.
  • Client์˜ context๋ฅผ Server์— ์ €์žฅํ•˜์ง€ ์•Š์Œ.
    • ์„ธ์…˜, ์ฟ ํ‚ค๊ฐ™์€ context ์ •๋ณด๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋˜์–ด ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•ด์ง.
  • Server๋Š” ๊ฐ๊ฐ์˜ ์š”์ฒญ์„ ๋ณ„๊ฐœ์˜ ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•˜๊ณ  ์ฒ˜๋ฆฌ.
  • ๊ฐ API Server๋Š” Client์˜ ์š”์ฒญ๋งŒ์„ ๋‹จ์ˆœ ์ฒ˜๋ฆฌ.

Cacheable (์บ์‹œ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ)

  • HTTP ํ”„๋กœํ† ์ฝœ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
  • ์บ์‹œ ์‚ฌ์šฉ์„ ํ†ตํ•ด ์‘๋‹ต์‹œ๊ฐ„์ด ๋นจ๋ผ์ง€๊ณ  RESR Server ํŠธ๋žฉ์žญ์…˜์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์‘๋‹ต์‹œ๊ฐ„, ์„ฑ๋Šฅ, ์„œ๋ฒ„์˜ ์ž์› ์ด์šฉ๋ฅ  ํ–ฅ์ƒ.

Layered System (๊ณ„์ธตํ˜• ๊ตฌ์กฐ)

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

Uniform Interface (์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ)

  • URI๋กœ ์ง€์ •ํ•œ Resource์— ๋Œ€ํ•œ ์กฐ์ž‘์„ ํ†ต์ผ๋˜๊ณ  ํ•œ์ •์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ˆ˜ํ–‰.
  • ํŠน์ • ์–ธ์–ด๋‚˜ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  HTTP ํ‘œ์ค€ ํ”„๋กœํ† ์— ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

Code-On-Demand [optional]

  • Server๋กœ ๋ถ€ํ„ฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ›์•„์„œ Client์—์„œ ์‹คํ–‰.



๐Ÿ”— REST API


โœ… REST API๋ž€?

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

  • API : ๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์˜ ์ง‘ํ•ฉ์„ ์ œ๊ณตํ•˜์—ฌ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ์ด‰์ง„ํ•˜๋ฉฐ, ์„œ๋กœ ์ •๋ณด๋ฅผ ๊ตํ™˜ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ.

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

1. URI๋Š” ์ •๋ณด์˜ resource๋ฅผ ํ‘œํ˜„ํ•ด์•ผํ•จ

  • resource๋Š” ๋™์‚ฌ๋ณด๋‹ค๋Š” ๋ช…์‚ฌ๋ฅผ, ๋Œ€๋ฌธ์ž๋ณด๋‹ค๋Š” ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉ.
  • resource์˜ ๋„ํ๋จผํŠธ ์ด๋ฆ„์œผ๋กœ๋Š” ๋‹จ์ˆ˜ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.
  • resource์˜ ์ปฌ๋ ‰์…˜ ์ด๋ฆ„์œผ๋กœ๋Š” ๋ณต์ˆ˜ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.
  • resource์˜ ์Šคํ† ์–ด ์ด๋ฆ„์œผ๋กœ๋Š” ๋ณต์ˆ˜ ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ.

๐Ÿ“ ๋ฆฌ์†Œ์Šค์˜ ์›ํ˜•
โœ” ๋„ํ๋จผํŠธ : ๋‹จ์ผ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ.
โœ” ์ปฌ๋ ‰์…˜ : ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ผ๋Š” ๋ฆฌ์†Œ์Šค.
โœ” ์Šคํ† ์–ด : ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์ €์žฅ์†Œ.

2. resource์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP Method (POST, GET, PUT, DELETE ๋“ฑ)๋กœ ํ‘œํ˜„

  • URI์— HTTP Method๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋จ.
    • GET /users/delete/2โŒ โ†’ DELETE /users/2โญ•
  • URI์— CRUD์˜ ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ–‰์œ„์— ๋Œ€ํ•œ ๋™์‚ฌ ํ‘œํ˜„์ด ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋จ.
    • GET /users/insert/2โŒ โ†’ POST /users/2โญ•
  • ๊ฒฝ๋กœ ๋ถ€๋ถ„ ์ค‘ ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„(์„ธ๋ถ€ resource)์€ ์œ ์ผํ•œ ๊ฐ’(id)์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.
    • id = 2 ์ธ user๋ฅผ ์‚ญ์ œํ•˜๋Š” route:DELETE /users/2

โœ… REST API ์„ค๊ณ„ ์„ธ๋ถ€ ๊ทœ์น™

1. ์Šฌ๋ž˜์‹œ ๊ตฌ๋ถ„์ž(/)๋Š” ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ

  • http://restapi.example.com/drink/coffee

2. URI ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋กœ ์Šฌ๋ž˜์‹œ(/)๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Œ

  • โŒ http://restapi.example.com/drink/coffee/ โŒ

3. ํ•˜์ดํ”ˆ(-)์€ URI ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  • http://restapi.example.com/drink/sugar-free

4. ๋ฐ‘์ค„(_)์€ URI์— ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

  • โŒhttp://restapi.example.com/drink/sugar_freeโŒ

5. URI ๊ฒฝ๋กœ์—๋Š” ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉ

  • URI ๊ฒฝ๋กœ์— ๋Œ€๋ฌธ์ž์˜ ์‚ฌ์šฉ์„ ํ”ผํ•œ๋‹ค

6. ํŒŒ์ผ ํ™•์žฅ์ž๋Š” URI์— ํฌํ•จํ•˜์ง€ ์•Š์Œ

  • message body ๋‚ด์šฉ์˜ ํฌ๋งท์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ URI ์•ˆ์— ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๊ณ , Accept header๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • โŒhttp://restapi.example.com/drink/coffee/1/photo.jpgโŒ
  • GET /drink/coffee/1/photo HTTP/1.1 Host: restapi.example.com
    Accept: image/jpg

7. ๋ฆฌ์†Œ์Šค ๊ฐ„ ์—ฐ๊ด€๊ด€๊ณ„ ํ‘œํ˜„

  • /๋ฆฌ์†Œ์Šค๋ช…/๋ฆฌ์†Œ์ŠคID/๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋ช…
  • GET users/{userid}/orders (์ผ๋ฐ˜์ ์œผ๋กœ ์†Œ์œ  ๊ด€๊ณ„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ)



๐Ÿ”— RESTful


โœ… RESTful์ด๋ž€?

  • REST๋ผ๋Š” ์•„ํ‚คํ…์ณ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์›น ์„œ๋น„์Šค๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ์šฉ์–ด.
  • REST API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋น„์Šค๋ฅผ RESTful ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… RESTful์˜ ๋ชฉ์ 

  • ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด REST API๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • RESTfulํ•œ API๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ๋ชฉ์ ์€ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์•„๋‹ˆ๋ผ ์ผ๊ด€์ ์ธ ์ปจ๋ฒค์…˜์„ ํ†ตํ•œ API์˜ ์ดํ•ด๋„ ๋ฐ ํ˜ธํ™˜์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ.






๐Ÿ’› ์ฐธ๊ณ  :
https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://dodop-blog.tistory.com/272
https://zsgg.tistory.com/entry/REST-API-%EB%94%94%EC%9E%90%EC%9D%B8-%EA%B7%9C%EC%B9%99

profile
๋ด‰์‹์ด๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์‹ถ์˜ค

0๊ฐœ์˜ ๋Œ“๊ธ€