๐Ÿ’ซ HTTP API ์„ค๊ณ„ ์˜ˆ์‹œ

leehyunjuยท2021๋…„ 6์›” 1์ผ
0

๋„คํŠธ์›Œํฌ

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

HTTP API ์„ค๊ณ„ ์˜ˆ์‹œ ์ค‘ ์•„๋ž˜ 3๊ฐ€์ง€ ์˜ˆ์‹œ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. HTTP API - ์ปฌ๋ ‰์…˜

  • POST ๊ธฐ๋ฐ˜ ๋“ฑ๋ก
  • ์˜ˆ) ํšŒ์›๊ด€๋ฆฌ API ์ œ๊ณต

2. HTTP API - ์Šคํ† ์–ด

  • PUT ๊ธฐ๋ฐ˜ ๋“ฑ๋ก
  • ์˜ˆ) ์ •์  ์ปจํ…์ธ  ๊ด€๋ฆฌ, ์›๊ฒฉ ํŒŒ์ผ ๊ด€๋ฆฌ

3. HTML FORM ์‚ฌ์šฉ

  • ์›น ํŽ˜์ด์ง€ ํšŒ์› ๊ด€๋ฆฌ
  • GET, POST๋งŒ ์ง€์›

๐Ÿ‘‰ 1. ํšŒ์›๊ด€๋ฆฌ ์‹œ์Šคํ…œ (API ์„ค๊ณ„)

๐ŸŒ POST ๊ธฐ๋ฐ˜ ๋“ฑ๋ก

  • ํšŒ์› ๋ชฉ๋ก /members -> GET
  • ํšŒ์› ๋“ฑ๋ก /members -> POST ๐Ÿ‘‰ ํšŒ์›์„ ๋“ฑ๋กํ•œ๋‹ค.
  • ํšŒ์› ์กฐํšŒ /members/{id} -> GET ๐Ÿ‘‰ ํšŒ์› ํ•˜๋‚˜๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  • ํšŒ์› ์ˆ˜์ • /members/{id} -> PATCH, PUT, POST ๐Ÿ‘‰ ์ˆ˜์ •ํ• ๋• PATCH, ๋Œ€์ฒด๋Š” PUT(์™„์ „ํžˆ ๋ฎ์„๋•Œ! ๊ฒŒ์‹œํŒ์— ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์šฉ), ์ด๊ฒƒ๋„ ์ €๊ฒƒ๋„ ์• ๋งคํ•œ ๊ฒฝ์šฐ ์ฒœํ•˜๋ฌด์  POST ์‚ฌ์šฉํ•˜๊ธฐ.
  • ํšŒ์› ์‚ญ์ œ /members/{id} -> DELETE ๐Ÿ‘‰ ์›ํ•˜๋Š” ํšŒ์› ๋ฒˆํ˜ธ๋ฅผ ์“ฐ๊ณ  DELETE๋ฅผ ํ•œ๋‹ค.

ํ•ญ์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•ด์•ผํ•œ๋‹ค. ์˜ˆ) ๋ฏธ๋„ค๋ž„์„ ์บ๋ผ -> '๋ฏธ๋„ค๋ž„'์ด ๋ฆฌ์†Œ์Šค์ž„!

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

- ํด๋ผ์ด์–ธํŠธ๋Š” ๋“ฑ๋ก๋  ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ๋ชจ๋ฅธ๋‹ค.

- ํšŒ์› ๋“ฑ๋ก /memebers -> POST
- POST /members

- ์„œ๋ฒ„๊ฐ€ ์ƒˆ๋กœ ๋“ฑ๋ก๋œ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค

- HTTP/1.1 201 Created
- Location: /members/100

- ์ปฌ๋ ‰์…˜

- ์„œ๋ฒ„๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋””๋ ‰ํ† ๋ฆฌ
- ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ
- ์—ฌ๊ธฐ์„œ ์ปฌ๋ ‰์…˜์€ /members

๐ŸŒ PUT ๊ธฐ๋ฐ˜ ๋“ฑ๋ก

  • ํŒŒ์ผ ๋ชฉ๋ก /files -> GET
  • ํŒŒ์ผ ์กฐํšŒ files/{filename} -> GET
  • ํŒŒ์ผ ๋“ฑ๋ก files/{filename} -> PUT
  • ํŒŒ์ผ ์‚ญ์ œ /files/{filename} -> DELETE
  • ํŒŒ์ผ ๋Œ€๋Ÿ‰ ๋“ฑ๋ก /files -> POST

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

- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค URI๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

- ํŒŒ์ผ ๋“ฑ๋ก /files/{filename} -> PUT
- PUT **/files/star.jpg**

- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์ง€์ •ํ•œ๋‹ค.

- ์Šคํ† ์–ด(Store)

- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์ €์žฅ์†Œ
- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์•Œ๊ณ  ๊ด€๋ฆฌ
- ์—ฌ๊ธฐ์„œ ์Šคํ† ์–ด๋Š” /files

POST๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ๋ชฐ๋ผ์„œ /members/๋งŒ ๋„˜๊ฒจ์ฃผ๋ฉด ์•Œ์•„์„œ {100}์ด๋ผ๋Š” ํšŒ์›๋ฒˆํ˜ธ ์ˆซ์ž๊ฐ€ ๋ถ™๋Š”๋‹ค. ๊ทผ๋ฐ PUT์€ ๋ณธ์ธ์ด ์•Œ๊ณ  URI๋ฅผ ์ง€์ •ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์€ ์‹ค๋ฌด์—์„œ๋Š” POST ๊ธฐ๋ฐ˜์˜ ์ปฌ๋ ‰์…˜๋“ค์„ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.


๐ŸŒ HTML FORM ์‚ฌ์šฉ

  • HTML FORM์€ GET,POST๋งŒ ์ง€์›ํ•œ๋‹ค.

  • AJAX ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•˜๋‹ค -> ํšŒ์› API ์ฐธ๊ณ 

  • ์ปจํŠธ๋กค URI
    - GET, POST๋งŒ ์ง€์›ํ•˜๋ฏ€๋กœ ์ œ์•ฝ์ด ์žˆ๋‹ค.

    • ์ด๋Ÿฐ ์ œ์•ฝ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋™์‚ฌ๋กœ ๋œ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ ์‚ฌ์šฉ
    • POST์˜ /new, /edit, /delete๊ฐ€ ์ปจํŠธ๋กค URI
    • HTTP ๋ฉ”์„œ๋“œ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์• ๋งคํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ (HTTP API ํฌํ•จ)
  • ํšŒ์› ๋ชฉ๋ก /members -> GET

  • ํšŒ์› ๋“ฑ๋ก ํผ /members/new -> GET

  • ํšŒ์› ๋“ฑ๋ก /members/new, /members -> POST

  • ํšŒ์› ์กฐํšŒ /members/{id} -> GET

  • ํšŒ์› ์ˆ˜์ • ํผ /members/{id}/edit -> GET

  • ํšŒ์› ์ˆ˜์ • /members/{id}/edit, /members/{id} -> POST

  • ํšŒ์› ์‚ญ์ œ /members/{id}/delete -> POST


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

  1. ๋ฌธ์„œ
  • ๋‹จ์ผ ๊ฐœ๋… (ํŒŒ์ผ ํ•˜๋‚˜, ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ROW)
  • ์˜ˆ) members/100, /files/star.jpg
  1. ์ปฌ๋ ‰์…˜ (๋Œ€๋ถ€๋ถ„ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค)
  • ์„œ๋ฒ„๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋””๋ ‰ํ„ฐ๋ฆฌ
  • ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค
  • ์˜ˆ) /members
  1. ์Šคํ† ์–ด (store) (๊ฒŒ์‹œํŒ ๊ฐ™์€ ๊ฒฝ์šฐ ์Šคํ† ์–ด๋„ ์ข…์ข… ์‚ฌ์šฉํ•œ๋‹ค)
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ์ž์› ์ €์žฅ์†Œ
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI๋ฅผ ์•Œ๊ณ  ๊ด€๋ฆฌ
    ์˜ˆ) /files
  1. ์ปจํŠธ๋กค๋Ÿฌ, ์ปจํŠธ๋กค URI
  • ๋ฌธ์„œ, ์ปฌ๋ ‰์…˜, ์Šคํ† ์–ด๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ์ถ”๊ฐ€ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰
  • ๋™์‚ฌ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉ
  • ์˜ˆ) /members/{id}/delete
profile
์•„๋Š‘ํ•œ ๋‡Œ๊ณต๊ฐ„ ๐Ÿง 

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