yeon's blog

[HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹] HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ - HTTP API ์„ค๊ณ„ ์˜ˆ์‹œ ๋ณธ๋ฌธ

HTTP

[HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹] HTTP ๋ฉ”์„œ๋“œ ํ™œ์šฉ - HTTP API ์„ค๊ณ„ ์˜ˆ์‹œ

yeonii 2023. 12. 3. 18:39

๐ŸŒฑ HTTP API ์„ค๊ณ„ ์˜ˆ์‹œ

API ์„ค๊ณ„ - POST ๊ธฐ๋ฐ˜ ๋“ฑ๋ก

๐Ÿ‘‰ ํšŒ์› ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
     1. ํšŒ์› ๋ชฉ๋ก: /members โžก๏ธ GET
     2. ํšŒ์› ๋“ฑ๋ก: /members โžก๏ธ POST
     3. ํšŒ์› ์กฐํšŒ: /members/{id} โžก๏ธ GET
     4. ํšŒ์› ์ˆ˜์ •: /members/{id} โžก๏ธ PATCH, PUT, POST
     5. ํšŒ์› ์‚ญ์ œ: /members/{id} โžก๏ธ DELETE

 

์‹ ๊ทœ ์ž์› ๋“ฑ๋ก ํŠน์ง•

  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋“ฑ๋ก๋  ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ๋ชจ๋ฅธ๋‹ค.
    • ํšŒ์› ๋“ฑ๋ก /members → POST
    • POST /members
  • ์„œ๋ฒ„๊ฐ€ ์ƒˆ๋กœ ๋“ฑ๋ก๋œ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.
    • HTTP/1.1 201 Created
    • Location: /member/100
  • ์ปฌ๋ ‰์…˜(Collection)
    • ์„œ๋ฒ„๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ
    • ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ
    • ์—ฌ๊ธฐ์„œ ์ปฌ๋ ‰์…˜์€ /members

 

API ์„ค๊ณ„ - PUT ๊ธฐ๋ฐ˜ ๋“ฑ๋ก

๐Ÿ‘‰ ํŒŒ์ผ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
     1. ํŒŒ์ผ ๋ชฉ๋ก: /files โžก๏ธ GET
     2. ํŒŒ์ผ ์กฐํšŒ: /files/{filename} โžก๏ธ GET
     3. ํŒŒ์ผ ๋“ฑ๋ก: /files/{filename} โžก๏ธ PUT
     4. ํŒŒ์ผ ์‚ญ์ œ: /files/{filename} โžก๏ธ DELETE
     5. ํŒŒ์ผ ๋Œ€๋Ÿ‰ ๋“ฑ๋ก: /files โžก๏ธ POST

 

์‹ ๊ทœ ์ž์› ๋“ฑ๋ก ํŠน์ง•

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • ํŒŒ์ผ ๋“ฑ๋ก /files/{filename} → PUT
    • PUT /files/star.jpg
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์ง€์ •ํ•œ๋‹ค.
  • ์Šคํ† ์–ด(Store)
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์ €์žฅ์†Œ
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์•Œ๊ณ  ๊ด€๋ฆฌ
    • ์—ฌ๊ธฐ์„œ ์Šคํ† ์–ด๋Š” /files

 

HTML Form ์‚ฌ์šฉ

๐Ÿ‘‰ ํšŒ์› ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
     1. ํšŒ์› ๋ชฉ๋ก: /members โžก๏ธ GET
     2. ํšŒ์› ๋“ฑ๋ก ํผ: /members/new โžก๏ธ GET
     3. ํšŒ์› ๋“ฑ๋ก: /members/new, /members โžก๏ธ POST
     4. ํšŒ์› ์กฐํšŒ: /members/{id} โžก๏ธ GET
     5. ํšŒ์› ์ˆ˜์ • ํผ: /members/{id}/edit โžก๏ธ GET
     6. ํšŒ์› ์ˆ˜์ •: /members/{id}/edit, /members/{id} โžก๏ธ POST
     7. ํšŒ์› ์‚ญ์ œ: /members/{id}/delete โžก๏ธ POST

 

  • ์ˆœ์ˆ˜ํ•œ HTML๊ณผ HTML Form์€ GET, POST๋งŒ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ์•ฝ์ด ์žˆ๋‹ค.
  • ์ปจํŠธ๋กค URI
    • GET, POST๋งŒ ์ง€์›ํ•˜๋Š” ์ œ์•ฝ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋™์‚ฌ๋กœ ๋œ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉ
    • HTTP ๋ฉ”์„œ๋“œ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์• ๋งคํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ
    • ๐Ÿ‘‰ /members/new
    • ๐Ÿ‘‰ /members/{id}/edit
    • ๐Ÿ‘‰ /members/{id}/delete

 

๐Ÿ“š ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์€ URI ์„ค๊ณ„ ๊ฐœ๋…

  • ๋ฌธ์„œ(document) : ๋‹จ์ผ ๊ฐœ๋… (ํŒŒ์ผ ํ•˜๋‚˜, ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค row)
    • ๐Ÿ‘‰ /members/100 /files/star.jpg
  • ์ปฌ๋ ‰์…˜(Collection) : ์„œ๋ฒ„๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ๋งŒ ํ•˜๊ณ  ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.
    • ๐Ÿ‘‰ /members
  • ์Šคํ† ์–ด(Store) : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ž์› ์ €์žฅ์†Œ
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์•Œ๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.
    • ๐Ÿ‘‰ /files
  • ์ปจํŠธ๋กค๋Ÿฌ(Controller), ์ปจํŠธ๋กค URI : ๋ฌธ์„œ, ์ปฌ๋ ‰์…˜, ์Šคํ† ์–ด๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ์ถ”๊ฐ€ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ํ•  ๋•Œ ๋™์‚ฌ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๐Ÿ‘‰ /members/{id}/delete