HTTP #6 ๊ธฐ๋ณธ์ ์ธ API ์ค๊ณ
by JiwonDev# Request (ํด๋ผ์ด์ธํธ โก ์๋ฒ)
- URI ์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก โก โGET
- HTTP Form์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ์ ์ก โก โPOST
- ์ง์ Body์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ์ ์ก โก โPOST, PUT, PACTH
์ฐธ๊ณ ๋ก ์น ๋ธ๋ผ์ฐ์ ์์๋ ๋ฉ์๋ ์ง์ ์ด ์๋ค๋ฉด ๊ธฐ๋ณธ๊ฐ์ GET์ผ๋ก ์ฌ์ฉํ๋ค.
๊ทธ๋์ ์น ๋ธ๋ผ์ฐ์ ์์ GET์์ฒญ์ URI ์ ๋ ฅ์ผ๋ก ๋ฐ๋ก ๊ฐ๋ฅํ์ง๋ง POST PUT๋ฑ์ ์ฝ๋ ์์ฑํ๊ฑฐ๋ ์ถ๊ฐ์ ์ธ ๋๊ตฌ๋ฅผ ์ด์ฉํด์ผ ํ๋ค. (Postman)
@ GET - ์ ์ , ๋์ ๋ฐ์ดํฐ ์กฐํ
- GET์ ์ฌ์ฉํ๋ค. ์ ์ ์ธ ๋ฐ์ดํฐ๋ ๊ฒฝ๋ก๋ง ์ง์ ํ๋ฉด ๋๋ ํ๋ผ๋ฏธํฐ๊ฐ ํ์์๋ค.
- ์์ฒญ ๋ฉ์์ง๊ฐ ํ์ํ ๋์ ์ธ ๋ฐ์ดํฐ๋ URI (=Header)์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฃ์ด ์์ฒญํ๋ค.
@ HTML Form์ ์ด์ฉํ ์ ์ก
HTML์ ์๋ <form> ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ ์ ์กํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋์์ด ์ผ์ด๋๋ค.
- POST ๋ฉ์๋ Content-type = application/x-www-form-urlencoded ๋ฐฉ์์ผ๋ก ํค๋๋ฅผ ์ง์ ํ๋ค.
โก x-www-form์ ์น์์ ๋ณด๋ธ ํผ๋ฐ์ดํฐ์์, urlencoded๋ ํ๊ธ๊ฐ์ ๋ฌธ์๋ฅผ ์ธ์ฝ๋ฉํด์ Body์ ๋ฃ์๋ค๋ ์๋ฏธ. - ๋ฐ๋์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ์ ๋์ผํ ํ์ (username=kim&age=20)์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ด์ ์ ์กํ๋ค.
<form enctype="multipart/form-data">๋ก ์ธ์ฝ๋ฉ ํ์ ๊ณผ content-type์ ๋ณ๊ฒฝํ ์ ์๋ค.
์ด ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ฐ์ดํฐํ์ผ์ ํ๋์ ๋ฉ์์ง๋ก ์ธ์ฝ๋ฉํ์ฌ ์ ์กํ๋ค. (*์ด๋ HTTP ํ์ผ ์ ์ก์์ ๋ฐ๋ก ๋ค๋ฃจ๊ฒ ๋ค.)
@ HTTP API ๋ฐ์ดํฐ ์ ์ก
ํด๋ผ์ด์ธํธ ์คํฌ๋ฆฝํธ ์ฝ๋ (์: AJAX ํต์ - Asynchronous JavaScript and XML)๋ฅผ ์ด์ฉํ HTTP ํต์ ๋ฐฉ๋ฒ์ด๋ค.
๋ญ๋ ์ ์กํ ์ ์๊ธดํ์ง๋ง, ๋ณดํต Content-type: application/json์ ํ์ค ๋ฉ์์ง ํ์ ์ผ๋ก ์ฌ์ฉํ๋ค. (์ด์ ์๋ XML)
# ์์ฒญ HTTP API๋ฅผ ์ค๊ณํด๋ณด์
๋ณดํต HTTP API๋ฅผ ์ค๊ณํ๋ค๊ณ ํ๋ฉด, ํฌ๊ฒ 3๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋ ์ ์๋ค.
๋ง์ฝ ์๋ฒ์์ ๋ฉ์๋๋ฅผ ์ง์ํ์ง ์๊ฑฐ๋ ์ฌ์ฉํ๊ธฐ ์ ๋งคํ๋ค๋ฉด POST๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ ์ผ ๋ซ๋ค.
@ URI ์ค๊ณํ๊ธฐ
์ด์ ๊ธ์์๋ ์ธ๊ธํ์ง๋ง, URI๋ก ๋ฆฌ์์ค์ ์์น๋ฅผ ์ง์ ํ๊ณ ๋ฉ์๋๋ก ๋์ํ๋๋ก ์ค๊ณํ๋๊ฒ ์ข๋ค.
โก member/id๊ฐ ์๋ members/id๋ฅผ ์ฌ์ฉํ๊ฑด ๋ฉค๋ฒ ์ ์ฅ์(members)์์ ๊บผ๋ด์จ๋ค๋ ์๋ฏธ๋ฅผ ๋ํ๋ด๊ธฐ ์ํจ์ด๋ค.
@ POST - ์ ๊ท ์์๋ฑ๋ก
- ํด๋ผ์ด์ธํธ๋ ๋ฑ๋ก๋ ๋ฆฌ์์ค์ URI๋ฅผ ๋ชจ๋ฅธ๋ค.
โก ํ์ ๋ฑ๋ก /members -> POST
โก POST /members - ์๋ฒ๊ฐ ์๋ก ๋ฑ๋ก๋ ๋ฆฌ์์ค URI๋ฅผ ์์ฑํด์ค๋ค.
โก HTTP/1.1 201 Created
Location: /members/100
- ์ปฌ๋ ์
(Collection)
โก ์๋ฒ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ๋๋ ํ ๋ฆฌ
โก ์๋ฒ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ
โก ์ฌ๊ธฐ์ ์ปฌ๋ ์ ์ /members ๋ฅผ ์๋ฏธํ๋ค.
@ PUT ๊ธฐ๋ฐ ๋ฑ๋ก
- PUT์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ ์์น(id๋ฑ)๋ฅผ ์๊ณ , ์ ํํ๊ฒ ์ง์ ํด์ค๋ค.
- ๋ฐ๋ฉด์ POST๋ ๋จ์ํ ์์ฒญ๋ง ํ๋๊ฑฐ์ง ๋ฆฌ์์ค์ ์์น๋ ์๋ฒ๊ฐ ์ง์ ํ๋ค.
ํ์ผ ๋ฑ๋ก์ PUT์ผ๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ ์ ํ๋ค. ์๋ก์ด ํ์ผ์ด ์ฌ๋ผ์ค๋ฉด ๊ธฐ์กด ํ์ผ์ ๋์ฒดํด์ผ ํ๋๊น.
โก ํ์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋ POST๋ก ์ฒ๋ฆฌํ๊ฒ ๋๋ค. ๊ตณ์ด ๋ฆฌ์์ค์ ์์น๋ฅผ ๊ธฐ์ตํด๋๊ณ ์ง์ ํ ํ์๊ฐ ์์ผ๋๊น
@ HTML Form ๋ง ์ฌ์ฉํด์ ๊ตฌํ (GET, POST)
๊ทธ๋ผ ์ถ๊ฐ์ ์ธ JS์ฝ๋ ์์ด HTTP Form๋ง์ ์ด์ฉํด์ ํด๋ผ์ด์ธํธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ์๋น์ค๋ ์ด๋ป๊ฒ ๋ง๋ค์ด์ผ ํ ๊น?
โก ์ด ๊ฒฝ์ฐ ์ต๋ํ GET, POST๋ฅผ ํ์ฉํ๊ณ ๋์ฒด์ฌ๋ก ์ปจํธ๋กค URI( /members/new, delete, edit )์ ์ฌ์ฉํ๋ค.
๋ฌผ๋ก HTTP API์ ๊ฒฝ์ฐ์๋ upgrade, doService ๊ฐ์ด ๋ฉ์๋๋ก ๊ตฌํํ๊ธฐ ์ ๋งคํ ๊ธฐ๋ฅ์ ์ปจํธ๋กคURI ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
# ์ฐธ๊ณ ํ๋ฉด ์ข์ URI ์ค๊ณ (restfulapi.net)
๋งค๋ฒ URI์ ์ด๋ฆ์ ๊ณ ๋ฏผํ๋๊ฑด ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด๋ค. ๊ทธ๋์ ์ฌ์ฉํ๊ธฐ ์ข์ ์ค๊ณ๋ฅผ ์ฐธ๊ณ ํด์ ๋ง๋ค์.
'๐๊ธฐ๋ณธ ์ง์ > ์น ๊ธฐ๋ณธ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP #8 ํค๋ (์์ฒญํค๋, ์๋ตํค๋, ์ฟ ํค, ์บ์, ํ๋ก์) (0) | 2021.09.06 |
---|---|
HTTP #7 ์ํ์ฝ๋ (200,300,400,500) (1) | 2021.09.06 |
HTTP #5 ์์ฒญ ๋ฉ์๋ (0) | 2021.09.06 |
HTTP #4 ํน์ง๊ณผ ๋ฉ์์ง ๊ตฌ์กฐ (0) | 2021.07.18 |
HTTP #3 URI์ ์น ๋ธ๋ผ์ฐ์ ์์ฒญํ๋ฆ (0) | 2021.07.17 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev