REST API

hyena_leeยท2023๋…„ 1์›” 31์ผ
0

TIL

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

๐ŸŒ– REST API์˜ ํƒ„์ƒ

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

๐ŸŒŽ REST ๊ตฌ์„ฑ

์‰ฝ๊ฒŒ ๋งํ•ด REST API๋Š” ๋‹ค์Œ์˜ ๊ตฌ์„ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐ‘์—์„œ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์ž์›(RESOURCE) - URI
  • ํ–‰์œ„(Verb) - HTTP METHOD
  • ํ‘œํ˜„(Representations)

๐ŸŒž REST ์˜ ํŠน์ง•

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

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

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

4) Self-descriptiveness (์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ)
REST์˜ ๋˜ ๋‹ค๋ฅธ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” REST API ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ๋„ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

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

๐ŸŽจ REST API๋ฅผ ๋””์ž์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

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

REST ์„ฑ์ˆ™๋„ ๋ชจ๋ธ์€ ์ด 4๋‹จ๊ณ„(0~3๋‹จ๊ณ„)๋กœ ๋‚˜๋ˆ„์–ด์ง‘๋‹ˆ๋‹ค.

์•ž์„œ ์ด์•ผ๊ธฐํ•œ ๋กœ์ด ํ•„๋”ฉ์€ ์ด ๋ชจ๋ธ์˜ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์ถฉ์กฑํ•ด์•ผ REST API๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ฃผ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์—„๋ฐ€ํ•˜๊ฒŒ 3๋‹จ๊ณ„๊นŒ์ง€ ์ง€ํ‚ค๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— 2๋‹จ๊ณ„๊นŒ์ง€๋งŒ ์ ์šฉํ•ด๋„ ์ข‹์€ API ๋””์ž์ธ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ HTTP API ๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

REST ์„ฑ์ˆ™๋„ ๋ชจ๋ธ - 0๋‹จ๊ณ„
REST ์„ฑ์ˆ™๋„ ๋ชจ๋ธ์— ๋”ฐ๋ฅด๋ฉด, 0๋‹จ๊ณ„์—์„œ๋Š” ๋‹จ์ˆœํžˆ HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด ๊ฒฝ์šฐ, ํ•ด๋‹น API๋ฅผ REST API๋ผ๊ณ  ํ•  ์ˆ˜๋Š” ์—†์œผ๋ฉฐ, 0๋‹จ๊ณ„๋Š” REST API๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

ํ—ˆ์ค€์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ฃผ์น˜์˜์˜ ์˜ˆ์•ฝ ๊ฐ€๋Šฅํ•œ ์‹œ๊ฐ„์„ ํ™•์ธํ•˜๊ณ , ์–ด๋–ค ํŠน์ • ์‹œ๊ฐ„์— ์˜ˆ์•ฝํ•˜๋Š” ์ƒํ™ฉ์„ ์˜ˆ๋กœ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

**๊ฒฐ๋ก , REST API ์„ค๊ณ„ ์‹œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ•ญ๋ชฉ์€ ๋‹ค์Œ์˜ 2๊ฐ€์ง€๋กœ ์š”์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

โœ๏ธ REST API ์ค‘์‹ฌ ๊ทœ์น™

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

>GET /members/delete/1

์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์€ REST๋ฅผ ์ œ๋Œ€๋กœ ์ ์šฉํ•˜์ง€ ์•Š์€ URI์ž…๋‹ˆ๋‹ค. URI๋Š” ์ž์›์„ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. delete์™€ ๊ฐ™์€ ํ–‰์œ„์— ๋Œ€ํ•œ ํ‘œํ˜„์ด ๋“ค์–ด๊ฐ€์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

2) ์ž์›์— ๋Œ€ํ•œ ํ–‰์œ„๋Š” HTTP Method(GET, POST, PUT, DELETE ๋“ฑ)๋กœ ํ‘œํ˜„
์œ„์˜ ์ž˜๋ชป ๋œ URI๋ฅผ HTTP Method๋ฅผ ํ†ตํ•ด ์ˆ˜์ •ํ•ด ๋ณด๋ฉด

DELETE /members/1

์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.
ํšŒ์›์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” GET, ํšŒ์› ์ถ”๊ฐ€ ์‹œ์˜ ํ–‰์œ„๋ฅผ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” POST METHOD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

ํšŒ์›์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” URI

GET /members/show/1 (x)
GET /members/1 (o)

ํšŒ์›์„ ์ถ”๊ฐ€ํ•  ๋•Œ

>GET /members/insert/2 (x)  - GET ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ์— ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
POST /members/2       (o)

[์ฐธ๊ณ ]HTTP METHOD์˜ ์•Œ๋งž์€ ์—ญํ• 
POST, GET, PUT, DELETE ์ด 4๊ฐ€์ง€์˜ Method๋ฅผ ๊ฐ€์ง€๊ณ  CRUD๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”ดURI ์„ค๊ณ„ ์‹œ ์ฃผ์˜ํ•  ์ 

1) ์Šฌ๋ž˜์‹œ ๊ตฌ๋ถ„์ž(/)๋Š” ๊ณ„์ธต ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ
http://restapi.example.com/houses/apartments
http://restapi.example.com/animals/mammals/whales
2) URI ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋กœ ์Šฌ๋ž˜์‹œ(/)๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค.
URI์— ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ๊ธ€์ž๋Š” ๋ฆฌ์†Œ์Šค์˜ ์œ ์ผํ•œ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋ฉฐ URI๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ์—ญ์œผ๋กœ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‹ค๋ฅด๋ฉด URI๋„ ๋‹ฌ๋ผ์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. REST API๋Š” ๋ถ„๋ช…ํ•œ URI๋ฅผ ๋งŒ๋“ค์–ด ํ†ต์‹ ์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋™์„ ์ฃผ์ง€ ์•Š๋„๋ก URI ๊ฒฝ๋กœ์˜ ๋งˆ์ง€๋ง‰์—๋Š” ์Šฌ๋ž˜์‹œ(/)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

http://restapi.example.com/houses/apartments/ (X)
http://restapi.example.com/houses/apartments  (0)

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

4) ๋ฐ‘์ค„(_)์€ URI์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
๊ธ€๊ผด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธด ํ•˜์ง€๋งŒ ๋ฐ‘์ค„์€ ๋ณด๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ๋ฐ‘์ค„ ๋•Œ๋ฌธ์— ๋ฌธ์ž๊ฐ€ ๊ฐ€๋ ค์ง€๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ‘์ค„ ๋Œ€์‹  ํ•˜์ดํ”ˆ(-)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.(๊ฐ€๋…์„ฑ)

5) URI ๊ฒฝ๋กœ์—๋Š” ์†Œ๋ฌธ์ž๊ฐ€ ์ ํ•ฉํ•˜๋‹ค.
URI ๊ฒฝ๋กœ์— ๋Œ€๋ฌธ์ž ์‚ฌ์šฉ์€ ํ”ผํ•˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์†Œ๋ฌธ์ž์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋กœ ์ธ์‹ํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. RFC 3986(URI ๋ฌธ๋ฒ• ํ˜•์‹)์€ URI ์Šคํ‚ค๋งˆ์™€ ํ˜ธ์ŠคํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ณ„ํ•˜๋„๋ก ๊ทœ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ง€์š”.

RFC 3986 is the URI (Unified Resource Identifier) Syntax document

6) ํŒŒ์ผ ํ™•์žฅ์ž๋Š” URI์— ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.
http://restapi.example.com/members/soccer/345/photo.jpg (X)
REST API์—์„œ๋Š” ๋ฉ”์‹œ์ง€ ๋ฐ”๋”” ๋‚ด์šฉ์˜ ํฌ๋งท์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ํŒŒ์ผ ํ™•์žฅ์ž๋ฅผ URI ์•ˆ์— ํฌํ•จ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Accept header๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค.

GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg

###๐ŸŸข ๋ฆฌ์†Œ์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•

REST ๋ฆฌ์†Œ์Šค ๊ฐ„์—๋Š” ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ‘œํ˜„๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

/๋ฆฌ์†Œ์Šค๋ช…/๋ฆฌ์†Œ์Šค ID/๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค๋ช…

ex)    GET : /users/{userid}/devices (์ผ๋ฐ˜์ ์œผ๋กœ ์†Œ์œ  โ€˜hasโ€™์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ)

๋งŒ์•ฝ์— ๊ด€๊ณ„๋ช…์ด ๋ณต์žกํ•˜๋‹ค๋ฉด ์ด๋ฅผ ์„œ๋ธŒ ๋ฆฌ์†Œ์Šค์— ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ โ€˜์ข‹์•„ํ•˜๋Š”โ€™ ๋””๋ฐ”์ด์Šค ๋ชฉ๋ก์„ ํ‘œํ˜„ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GET : /users/{userid}/likes/devices (๊ด€๊ณ„๋ช…์ด ์• ๋งคํ•˜๊ฑฐ๋‚˜ ๊ตฌ์ฒด์  ํ‘œํ˜„์ด ํ•„์š”ํ•  ๋•Œ)

4-4. ์ž์›์„ ํ‘œํ˜„ํ•˜๋Š” Colllection๊ณผ Document
Collection๊ณผ Document์— ๋Œ€ํ•ด ์•Œ๋ฉด URI ์„ค๊ณ„๊ฐ€ ํ•œ ์ธต ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. DOCUMENT๋Š” ๋‹จ์ˆœํžˆ ๋ฌธ์„œ๋กœ ์ดํ•ดํ•ด๋„ ๋˜๊ณ , ํ•œ ๊ฐ์ฒด๋ผ๊ณ  ์ดํ•ดํ•˜์…”๋„ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์€ ๋ฌธ์„œ๋“ค์˜ ์ง‘ํ•ฉ, ๊ฐ์ฒด๋“ค์˜ ์ง‘ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ์ดํ•ดํ•˜์‹œ๋Š”๋ฐ ์ข€๋” ํŽธํ•˜์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜๊ณผ ๋„ํ๋จผํŠธ๋Š” ๋ชจ๋‘ ๋ฆฌ์†Œ์Šค๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ URI์— ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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

์œ„ URI๋ฅผ ๋ณด์‹œ๋ฉด sports๋ผ๋Š” ์ปฌ๋ ‰์…˜๊ณผ soccer๋ผ๋Š” ๋„ํ๋จผํŠธ๋กœ ํ‘œํ˜„๋˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ข€ ๋” ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž๋ฉด

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

sports, players ์ปฌ๋ ‰์…˜๊ณผ soccer, 13(13๋ฒˆ์ธ ์„ ์ˆ˜)๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋„ํ๋จผํŠธ๋กœ URI๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ์ปฌ๋ ‰์…˜์€ ๋ณต์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ข€ ๋” ์ง๊ด€์ ์ธ REST API๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ปฌ๋ ‰์…˜๊ณผ ๋„ํ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‹จ์ˆ˜ ๋ณต์ˆ˜๋„ ์ง€์ผœ์ค€๋‹ค๋ฉด ์ข€ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด URI๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

profile
์‹ค์ˆ˜๋ฅผ ๋‘๋ ค์›Œ ๋ง๊ณ  ๊ณ„์† ๋„์ „ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์—ฌ์ •!

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด