junghyunlyoo restapi - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki

REST API์˜ ์˜๋ฏธ

  • REST(REpresentational State Transfer) '๋Œ€ํ‘œ์ ์ธ ์ƒํƒœ ์ „๋‹ฌ'

  • REST๋ž€, "์›น์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ž์›(์ด๋ฏธ์ง€, ๋™์˜์ƒ, DB ์ž์›)์— ๊ณ ์œ ํ•œ URI๋ฅผ ๋ถ€์—ฌํ•ด ํ™œ์šฉ"ํ•˜๋Š” ๊ฒƒ

  • ์ž์›์„ ์ •์˜ํ•˜๊ณ  ์ž์›์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ์˜๋ฏธ

  • ๋”ฐ๋ผ์„œ Restful API๋Š” REST ํŠน์ง•์„ ์ง€ํ‚ค๋ฉด์„œ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ

REST API์˜ ์˜ˆ์‹œ

http://uniesta.com/news/view.do?ncd=3421128

์ด URI๋Š” Non RESTful URI๋กœ, ์–ด๋–ค ์ž์›(resource)์ธ์ง€ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์—†๋‹ค.

http://uniesta.com/boards/1/posts/406

์ด URL๋Š” RESTful URI๋กœ, ์š”์ฒญํ•˜๋Š” ์ž์›(resource)์ด ๊ฒŒ์‹œํŒ๋“ค ์ค‘ ์ฒซ๋ฒˆ์งธ ๊ฒŒ์‹œํŒ์— ์žˆ๊ณ , ๊ทธ ๊ฒŒ์‹œํŒ์˜ ๊ธ€๋“ค ์ค‘ 406๋ฒˆ์งธ ๊ธ€์ž„์„ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

REST API์˜ ๊ตฌ์„ฑ

์š”์†Œ ์˜ˆ์‹œ
์ž์›(RESOURCE) URI
ํ–‰์œ„(Verb) HTTP METHOD
ํ‘œํ˜„(Representations) /users GET

REST API์˜ ํŠน์ง•

Stateless

HTTP๋Š” Stateless Protocol ์ด๋ฏ€๋กœ, REST ์—ญ์‹œ ๋ฌด์ƒํƒœ์„ฑ์„ ๊ฐ–๋Š”๋‹ค. 

์ฆ‰, HttpSession๊ณผ ๊ฐ™์€ ์ปจํ…์ŠคํŠธ ์ €์žฅ์†Œ์— ์ƒํƒœ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ , API ์„œ๋ฒ„๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ๋งŒ์„ ๋‹จ์ˆœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์„ธ์…˜๊ณผ ๊ฐ™์€ ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์‹ ๊ฒฝ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•ด์ง„๋‹ค.

Cacheable

HTTP ๊ธฐ์กด์˜ ์›น ํ‘œ์ค€์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด์˜ ์ธํ”„๋ผ๋ฅผ ๊ทธ๋Œ€๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

HTTP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜์˜ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋‚˜, SSL์€ ๋ฌผ๋ก ์ด๊ณ  HTTP๊ฐ€ ๊ฐ€์ง„ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ํŠน์ง• ์ค‘์˜ ํ•˜๋‚˜์ธ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

Self-descriptiveness

๋™์‚ฌ(Method) + ๋ช…์‚ฌ(URI) ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์–ด ์–ด๋–ค ๋ฉ”์„œ๋“œ์— ๋ฌด์Šจ ํ–‰์œ„๋ฅผ ํ•˜๋Š”์ง€, ๋ฌธ์„œ๋ฅผ ๋ณด์ง€ ์•Š๊ณ ๋„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

REST API์˜ ์„ค๊ณ„1 - ๊ธฐ๋ณธ์„ค๊ณ„

  • URI๋Š” ์ž์›์„ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.(๋ฆฌ์†Œ์Šค๋ช…์€ ๋™์‚ฌ๋ณด๋‹ค๋Š” ๋ช…์‚ฌ๋ฅผ ์‚ฌ์šฉ)

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

ex1) http://restapi.example.com/houses/apartments 

ex2) http://restapi.example.com/animals/mammals/whales
  • ๋ถ„๋ช…ํ•œ URI๋ฅผ ๋งŒ๋“ค์–ด ํ†ต์‹ ์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋™์„ ์ฃผ์ง€ ์•Š๋„๋ก URI์˜ ๋งˆ์ง€๋ง‰์—๋Š” ์Šฌ๋ž˜์‹œ(/)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • URI์— ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ๊ธ€์ž๋Š” ๋ฆฌ์†Œ์Šค์˜ ์œ ์ผํ•œ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค.

  • URI์— ๋Œ€๋ฌธ์ž ์‚ฌ์šฉ์€ ํ”ผํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. (๋Œ€์†Œ๋ฌธ์ž์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ)

  • URI๋ฅผ ์‰ฝ๊ฒŒ ์ฝ๊ณ  ํ•ด์„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถˆ๊ฐ€ํ”ผํ•˜๊ฒŒ ๊ธด URI๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ํ•˜์ดํ”ˆ์„ ์‚ฌ์šฉํ•ด ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

(_์€ URI์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.)

  • ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ๋‚ด์šฉ์˜ ํฌ๋งท์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ URI ์•ˆ์— ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  Accept header๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
ex) GET /members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg
  • ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP Method(GET, POST, PUT, DELETE ๋“ฑ)์œผ๋กœ ํ‘œํ˜„

REST API์˜ ์„ค๊ณ„2 - ๋ฆฌ์†Œ์Šค ๊ฐ„์˜ ๊ด€๊ณ„ ํ‘œํ˜„

  • REST ๋ฆฌ์†Œ์Šค ๊ฐ„์—๋Š” ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•œ๋‹ค.
/๋ฆฌ์†Œ์Šค๋ช…/๋ฆฌ์†Œ์ŠคID/๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋ช…

ex) GET : /users/{userid}/devices (์ผ๋ฐ˜์ ์œผ๋กœ ์†Œ์œ  โ€˜hasโ€™์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ)
  • ๊ด€๊ณ„๋ช…์ด ๋ณต์žกํ•˜๋‹ค๋ฉด ์ด๋ฅผ ์„œ๋ธŒ ๋ฆฌ์†Œ์Šค์— ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
ex) GET : /users/{userid}/likes/devices (์‚ฌ์šฉ์ž๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๋””๋ฐ”์ด์Šค ๋ชฉ๋ก)

REST API์˜ ์„ค๊ณ„3 - ์ž์›์„ ํ‘œํ˜„ํ•˜๋Š” Colllection๊ณผ Document

Collection๊ณผ Document์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๋ฉด URI ์„ค๊ณ„๊ฐ€ ์ˆ˜์›”ํ•ด์ง„๋‹ค.

Collection๊ณผ Document๋Š” URI์— ํ‘œํ˜„๋˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  • Collection -> ๋ฌธ์„œ๋“ค์˜ ์ง‘ํ•ฉ, ๊ฐ์ฒด๋“ค์˜ ์ง‘ํ•ฉ

  • Document -> Collection ์ค‘ ํ•˜๋‚˜์˜ ํŠน์ • ๊ฐ์ฒด

http:// restapi.example.com/sports/soccer

    Collection : sports

    Document : soccer
http:// restapi.example.com/sports/soccer/players/13
    
    Collection : sports, players

    Document : soccer, 13๋ฒˆ player

์ด ๋‘๊ฐœ์˜ ์˜ˆ๋กœ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ, Collection์€ ๋ณต์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

์ข€ ๋” ์ง๊ด€์ ์ธ REST API๋ฅผ ์œ„ํ•ด์„œ, ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‹จ์ˆ˜์ธ์ง€, ๋ณต์ˆ˜์ธ์ง€ ์ •ํ™•ํžˆ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

REST API์˜ ์„ค๊ณ„์˜ ์ž˜๋ชป๋œ ์˜ˆ

x o
GET /members/delete/1 DELETE /members/1
GET /members/show/1 GET /members/1
GET /members/insert/2 POST /members/2