๐ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฐ์ดํฐ ์ ์ก
โ ๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์
๐ป ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- GET
- ์ฃผ๋ก ์ ๋ ฌ ํํฐ์ ์ฌ์ฉ(e.g. ๊ฒ์์ด, ๊ฒ์ํ ์ ๋ ฌ ์กฐ๊ฑด)
๐ป ๋ฉ์ธ์ง ๋ฐ๋๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- POST, PUT, PATCH
- ํ์ ๊ฐ์ , ์ํ ์ฃผ๋ฌธ, ๋ฆฌ์์ค ๋ฑ๋ก, ๋ฆฌ์์ค ๋ณ๊ฒฝ
โ 4๊ฐ์ง ์ํฉ
๐ป ์ ์ ๋ฐ์ดํฐ ์กฐํ
- ์ด๋ฏธ์ง, ์ ์ ํ ์คํธ ๋ฌธ์
- ์กฐํ๋ GET ์ฌ์ฉ
- ๋จ์ํ ๋ฆฌ์์ค ๊ฒฝ๋ก๋ง ์ง์ ํด์ฃผ๋ฉด ์๋ฒ๊ฐ ๋ฆฌ์์ค๋ฅผ ๋ฐํํด์ค
- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ง ์์
- ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ์ง ์์
๐ป ๋์ ๋ฐ์ดํฐ ์กฐํ
- ๊ฒ์์ด์ ๊ฐ์ ์ถ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ฃผ๊ธฐ ์ํด ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํจ
- ์ฃผ๋ก ๊ฒ์, ๊ฒ์ํ ๋ชฉ๋ก์์ ์ ๋ ฌ ํํฐ(๊ฒ์์ด)
- ์กฐํ ์กฐ๊ฑด์ ์ค์ฌ์ฃผ๋ ํํฐ, ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ ์ ๋ ฌ ์กฐ๊ฑด์ ์ฃผ๋ก ์ฌ์ฉ
- ์กฐํ๋ GET ์ฌ์ฉ
- GET์ ์ฟผ๋ฆฌ ํ๋ฆฌ๋ฏธํฐ๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ
๐ป HTML Form ๋ฐ์ดํฐ ์ ์ก
- POST ์ ์ก
- submit ๋ฒํผ์ ๋๋ฅด๋ฉด ์น๋ธ๋ผ์ฐ์ ๊ฐ ์์ฑ๋ form ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ http ๋ฉ์ธ์ง๋ฅผ ์์ฑํด์ค
- http ๋ฉ์ธ์ง๋ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ์ ๊ฑฐ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์์ฑ๋จ
- ์ด๋ฌํ content-type์ ์ฝ์๋์ด ์์
- e.g. ํ์ ๊ฐ์ , ์ํ ์ฃผ๋ฌธ, ๋ฐ์ดํฐ ๋ณ๊ฒฝ, ...
- Content-type: application/x-www-form-urlencoded
- form์ ๋ด์ฉ์ ๋ฉ์ธ์ง ๋ฐ๋๋ฅผ ํตํด ์ ์ก (key=value ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ํ์)
- ์ ์ก ๋ฐ์ดํฐ๋ฅผ url encoding ์ฒ๋ฆฌ e.g. abc๊น -> abc%EA%B9%80
- Content-type: multipart/form-data
- form์ enctype์ multipart/form-data๋ก ์ง์
- enctype์ ๋ฉ์ธ์ง ๋ฐ๋์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ์ ํ์์ ์ง์ ํจ
- byte๋ก ๋์ด์๋ ํ์ผ๊น์ง ํจ๊ป ์ ์ก
- ๋ค๋ฅธ ์ข ๋ฅ์ ์ฌ๋ฌ ํ์ผ๊ณผ ํผ์ ๋ด์ฉ์ ํจ๊ป ์ ์กํ ์ ์์
- GET ์ ์ก
- ๋ฉ์ธ์ง ๋ฐ๋๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ์ ์กํจ
- GET์ ์กฐํํ๋ ๋ฉ์๋์ด๋ฏ๋ก ๋ฆฌ์์ค ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ ๊ณณ(ํ์ ๊ฐ์ )์๋ ์ฌ์ฉํ๋ฉด ์๋จ
- ํ์ ์กฐํ ์ ์ฌ์ฉ
โป์ฐธ๊ณ โป : HTML Form ์ ์ก์ GET, POST๋ง ์ง์
๐ป HTTP API ๋ฐ์ดํฐ ์ ์ก
HTML ํผ์ ์ฌ์ฉํ์ง ์๋ ๊ฑฐ์ ๋ชจ๋ ์ํฉ์ ์ฌ์ฉ
- ์๋ฒ๋ผ๋ฆฌ ํต์ ์ : html์ด ์์ผ๋๊น API๋ฅผ ํตํด ์ ์ก
- ์ฑ ํด๋ผ์ด์ธํธ : ์์ดํฐ, ์๋๋ก์ด๋
- ์น ํด๋ผ์ด์ธํธ : HTML์ form ์ ์ก ๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํ ํต์ ์ ์ฌ์ฉ(AJAX)
- e.g. React, VueJs ๊ฐ์ ์น ํด๋ผ์ด์ธํธ์ API ํต์
- POST, PUT, PATCH ๋ชจ๋ ํ์ฉ ๊ฐ๋ฅ : ๋ฉ์ธ์ง ๋ฐ๋๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ์ก
- GET : ์กฐํ, ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ
- Content-Type : ์ฃผ๋ก application/json ์ฌ์ฉ (xml๋ณด๋ค ์ฝ๊ธฐ ์ฝ๊ณ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฏ๋ก ์ง๊ธ์ ๊ฑฐ์ json์ ๋ง์ด ์ฌ์ฉํจ )
๐ HTTP API ์ค๊ณ ์์
โ HTTP API - ์ปฌ๋ ์ (POST ๊ธฐ๋ฐ ๋ฑ๋ก)
e.g. ํ์ ๊ด๋ฆฌ API ์ ๊ณต
๐ป POST ์ ๊ท ์์ ๋ฑ๋ก ํน์ง
- ํด๋ผ์ด์ธํธ๋ ๋ฑ๋ก๋ ๋ฆฌ์์ค์ URI๋ฅผ ๋ชจ๋ฆ (ํ์ ๋ฑ๋ก /members -> POST)
- ๋ฐ์ดํฐ ๋ฑ๋ก ์ ์๋ฒ๊ฐ ๋ฆฌ์์ค๋ฅผ ์๋ณํ ์ ์๋ URI๋ฅผ ๋ง๋ค์ด์ค (Location: /members/100)
- ์ด๋ฌํ ํ์๋ฅผ '์ปฌ๋ ์
'์ด๋ผ๊ณ ํจ
- ์๋ฒ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ๋๋ ํ ๋ฆฌ
- ์๋ฒ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ
- ์ฌ๊ธฐ์ ์ปฌ๋ ์ ์ /members
โ HTTP API - ์คํ ์ด (PUT ๊ธฐ๋ฐ ๋ฑ๋ก)
e.g. ์ ์ ์ปจํ ์ธ ๊ด๋ฆฌ, ์๊ฒฉ ํ์ผ ๊ด๋ฆฌ
- ํ์ผ ๋ฑ๋ก ์ ์ฌ์ฉ
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค URI๋ฅผ ์๊ณ ์์ด์ผ ํจ (/files/{filename} -> PUT)
- ์ด๋ฌํ ํ์์ '์คํ ์ด'๋ผ๊ณ ํจ
- ํด๋ผ์ด์ธํธ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ์ ์ฅ์
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์๊ณ ๊ด๋ฆฌํจ
- ์ฌ๊ธฐ์ ์คํ ์ด๋ /files
- ๋๋ถ๋ถ ์ค๋ฌด์์๋ POST๊ธฐ๋ฐ์ ์ปฌ๋ ์ ์ ์ฌ์ฉํจ. PUT์ ๊ฑฐ์ ์ฌ์ฉx
โ HTML FORM ์ฌ์ฉ
e.g. ์น ํ์ด์ง ํ์ ๊ด๋ฆฌ
- GET, POST๋ง ์ง์
- DELETE๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ URI์ control URI๋ฅผ ํฌํจ
- ํ์ ๋ฑ๋ก ํผ๊ณผ ๋ฑ๋ก์ URI๋ ๊ฐ๊ฒ ์ค์ ํ๋ ๊ฒ์ ๊ถ์ฅ
- ์ปจํธ๋กค URI
- GET, POST๋ง ์ง์ํ๋ฏ๋ก ์ ์ฝ์ด ์์
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ฌ๋ก๋ ๋ฆฌ์์ค ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉ
- POST์ /new, /edit, /delete๊ฐ control URI
- ์ปฌ๋ ์ , ์คํ ์ด ๋ฑ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ด๋ ค์ด ์ถ๊ฐ ํ๋ก์ธ์ค ์คํ
- HTTP ๋ฉ์๋๋ก ํด๊ฒฐํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ ์ฌ์ฉ (HTTP API์์๋ ์ฌ์ฉํ ์ ์์)
- ์ค๋ฌด์์๋ ๋ง์ด ์ฌ์ฉํจ (์ต๋ํ ๋ฆฌ์์ค๋ก ์ค๊ณํ๊ณ , ์๋ ๋ ๋์ฒด์ฌ๋ก ์ฌ์ฉํ์)
URI ์ค๊ณ ๊ด๋ จ ์ฐธ๊ณ ํด๋ณด๋ฉด ์ข์ ์ฌ์ดํธ : https://restfulapi.net/resource-naming
๊ฐ์ ์๋ฃ
๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์ - ์ธํ๋ฐ | ๊ฐ์
์ค๋ฌด์ ๊ผญ ํ์ํ HTTP ํต์ฌ ๊ธฐ๋ฅ๊ณผ ์ฌ๋ฐ๋ฅธ HTTP API ์ค๊ณ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ...
www.inflearn.com
'WEB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTTP] HTTP ์ํ์ฝ๋ (0) | 2022.03.13 |
---|---|
[HTTP] API URI ์ค๊ณ์ HTTP ๋ฉ์๋ (0) | 2022.03.13 |
[HTTP] HTTP ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ํน์ง (0) | 2022.03.13 |