๐Ÿ“ฐ News/think

REST API ์ œ๋Œ€๋กœ ์•Œ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ

kkh1902 2022. 5. 5. 01:44
728x90
๋ฐ˜์‘ํ˜•

REST API ์ œ๋Œ€๋กœ ์•Œ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ

๋ชฉ์ฐจ

  1. REST API์˜ ํƒ„์ƒ
  2. REST ๊ตฌ์„ฑ
  3. REST ์˜ ํŠน์ง•
  4. REST API ๋””์ž์ธ ๊ฐ€์ด๋“œ
  5. HTTP ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ

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

1. REST API์˜ ํƒ„์ƒ

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

2. REST ๊ตฌ์„ฑ

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

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

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์˜ ๋˜ ๋‹ค๋ฅธ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” REST API ๋ฉ”์‹œ์ง€๋งŒ ๋ณด๊ณ ๋„ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ํ‘œํ˜„ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

5) Client - Server ๊ตฌ์กฐ

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

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

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

4. REST API ๋””์ž์ธ ๊ฐ€์ด๋“œ

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

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

๋‹ค๋ฅธ ๊ฒƒ์€ ๋‹ค ์žŠ์–ด๋„ ์œ„ ๋‚ด์šฉ์€ ๊ผญ ๊ธฐ์–ตํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

4-1. 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๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

METHOD์—ญํ• 

POST POST๋ฅผ ํ†ตํ•ด ํ•ด๋‹น URI๋ฅผ ์š”์ฒญํ•˜๋ฉด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
GET GET๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•˜๊ณ  ํ•ด๋‹น ๋„ํ๋จผํŠธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
PUT PUT๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
DELETE DELETE๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹์œผ๋กœ URI๋Š” ์ž์›์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์— ์ง‘์ค‘ํ•˜๊ณ  ํ–‰์œ„์— ๋Œ€ํ•œ ์ •์˜๋Š” HTTP METHOD๋ฅผ ํ†ตํ•ด ํ•˜๋Š” ๊ฒƒ์ด RESTํ•œ API๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ์ค‘์‹ฌ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.

4-2. 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

4-3. ๋ฆฌ์†Œ์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•


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๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. HTTP ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ

๋งˆ์ง€๋ง‰์œผ๋กœ ์‘๋‹ต ์ƒํƒœ์ฝ”๋“œ๋ฅผ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž˜ ์„ค๊ณ„๋œ REST API๋Š” URI๋งŒ ์ž˜ ์„ค๊ณ„๋œ ๊ฒƒ์ด ์•„๋‹Œ ๊ทธ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ž˜ ๋‚ด์–ด์ฃผ๋Š” ๊ฒƒ๊นŒ์ง€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ์‘๋‹ต์˜ ์ƒํƒœ์ฝ”๋“œ๋งŒ์œผ๋กœ๋„ ๋งŽ์€ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‘๋‹ต์˜ ์ƒํƒœ์ฝ”๋“œ ๊ฐ’์„ ๋ช…ํ™•ํžˆ ๋Œ๋ ค์ฃผ๋Š” ๊ฒƒ์€ ์ƒ๊ฐ๋ณด๋‹ค ์ค‘์š”ํ•œ ์ผ์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ 200์ด๋‚˜ 4XX๊ด€๋ จ ํŠน์ • ์ฝ”๋“œ ์ •๋„๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ฒ˜๋ฆฌ ์ƒํƒœ์— ๋Œ€ํ•œ ์ข€ ๋” ๋ช…ํ™•ํ•œ ์ƒํƒœ์ฝ”๋“œ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๊ถŒ์žฅํ•˜๋Š” ๋ฐ”์ž…๋‹ˆ๋‹ค.
์ƒํƒœ์ฝ”๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ๋ช‡ ๊ฐ€์ง€๋งŒ ์ •๋ฆฌํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ƒํƒœ์ฝ”๋“œ

200 ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•จ
201 ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋– ํ•œ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ์„ ์š”์ฒญ, ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ๋จ(POST๋ฅผ ํ†ตํ•œ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์ž‘์—… ์‹œ)

์ƒํƒœ์ฝ”๋“œ

400 ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋ถ€์ ์ ˆ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต ์ฝ”๋“œ
401 ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต ์ฝ”๋“œ
  (๋กœ๊ทธ์ธ ํ•˜์ง€ ์•Š์€ ์œ ์ €๊ฐ€ ๋กœ๊ทธ์ธ ํ–ˆ์„ ๋•Œ, ์š”์ฒญ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ)
403 ์œ ์ € ์ธ์ฆ์ƒํƒœ์™€ ๊ด€๊ณ„ ์—†์ด ์‘๋‹ตํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ–ˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต ์ฝ”๋“œ
  (403 ๋ณด๋‹ค๋Š” 400์ด๋‚˜ 404๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ๊ถŒ๊ณ . 403 ์ž์ฒด๊ฐ€ ๋ฆฌ์†Œ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ๋œป์ด๊ธฐ ๋•Œ๋ฌธ์—)
405 ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์—์„œ๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ Method๋ฅผ ์ด์šฉํ–ˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต ์ฝ”๋“œ

์ƒํƒœ์ฝ”๋“œ

301 ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ URI๊ฐ€ ๋ณ€๊ฒฝ ๋˜์—ˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต ์ฝ”๋“œ
  (์‘๋‹ต ์‹œ Location header์— ๋ณ€๊ฒฝ๋œ URI๋ฅผ ์ ์–ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.)
500 ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต ์ฝ”๋“œ

๊ธ€์„ ๋งˆ์น˜๋ฉฐ

RESTFulํ•œ API๋ฅผ ์„ค๊ณ„ํ•˜์‹ค ๋•Œ ๋„์›€์ด ๋ ๋งŒํ•œ ๋‚ด์šฉ๋“ค์„ ์ œ ๋‚˜๋ฆ„์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ •๋ฆฌ๋ฅผ ํ•˜๋ฉด์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋Š๋‚€ ๊ฒƒ์€ ์ •ํ™•ํžˆ ์•Œ์ง€ ๋ชปํ•˜๋ฉด '์„ค๋ช…ํ•  ์ˆ˜ ์—†๋‹ค'๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๋Ÿฐ ๋ง์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. '๋‹น์‹ ์ด ์–ด๋–ค ๊ฒƒ์„ ํ• ๋จธ๋‹ˆ์—๊ฒŒ ์„ค๋ช…ํ•ด ์ฃผ์ง€ ๋ชปํ•œ๋‹ค๋ฉด, ๊ทธ๊ฒƒ์€ ์ง„์ •์œผ๋กœ ์ดํ•ดํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.' ์ € ๋ฌธ๊ตฌ๋ฅผ ํ•ญ์ƒ ๊ฐ€์Šด ๊นŠ์ด ์ƒˆ๊ธฐ๊ณ  ์•ž์œผ๋กœ ๋ฌด์—‡์ธ๊ฐ€ ์ƒˆ๋กœ์šด ์ง€์‹์„ ํ•™์Šตํ•ด ์‹ค๋ฌด์— ์ ์šฉํ•  ๋•Œ์—๋„ '๋Œ€์ถฉ'์ด ์•„๋‹Œ '์ •ํ™•ํ•œ ์ดํ•ด'๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ€๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค๋Š” ๋‹ค์ง๊ณผ ํ•จ๊ป˜ ๊ธ€์„ ๋งˆ๋ฌด๋ฆฌ ์ง“๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ REST API๋Š” ์ •ํ•ด์ง„ ๋ช…ํ™•ํ•œ ํ‘œ์ค€์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— REST API๋ฅผ ์‚ฌ์šฉํ•จ์— ์žˆ์–ด '๋ฌด์—‡์ด ์˜ณ๊ณ  ๊ทธ๋ฅธ์ง€'๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ฐœํ•˜๋Š” ์„œ๋น„์Šค์˜ ํŠน์ง•๊ณผ ๊ฐœ๋ฐœ ์ง‘๋‹จ์˜ ํ™˜๊ฒฝ๊ณผ ์„ฑํ–ฅ ๋“ฑ์ด ์ถฉ๋ถ„ํžˆ ๊ณ ๋ ค๋˜์–ด ์„ค๊ณ„๋˜์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ถ€์กฑํ•œ ๋‚ด์šฉ์ด๋‚˜ ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋ถ€ํƒ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•