๋ฐ์ดํฐ ์ ๋ฌ ๋ฐฉ์์ ํฌ๊ฒ 2๊ฐ์ง์ด๋ค.
1. ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- GET
- ์ฃผ๋ก ์ ๋ ฌ ํํฐ(๊ฒ์์ด)
2. ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ก
- POST, PUT, PATCH
- ํ์ ๊ฐ์ , ์ํ ์ฃผ๋ฌธ, ๋ฆฌ์์ค ๋ฑ๋ก, ๋ฆฌ์์ค ๋ณ๊ฒฝ
์์)
1. ์ ์ ๋ฐ์ดํฐ ์กฐํ - ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ๋ฏธ์ฌ์ฉ
GET /static/start.jpg -> ๋ฆฌ์์ค ๊ฒฝ๋ก๋ก๋ง ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
2. ๋์ ๋ฐ์ดํฐ ์กฐํ - ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ
GET /search?q=hello&hl=ko
- ์ฃผ๋ก ๊ฒ์, ๊ฒ์ํ ๋ชฉ๋ก์์ ์ ๋ ฌ ํํฐ(๊ฒ์์ด)
- ์กฐํ ์กฐ๊ฑด์ ์ค์ฌ์ฃผ๋ ํํฐ, ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ ์ ๋ ฌ ์กฐ๊ฑด์ ์ฃผ๋ก ์ฌ์ฉ
- ์กฐํ๋ GET ์ฌ์ฉ
- GET์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ
3. HTML Form ๋ฐ์ดํฐ ์ ์ก - GET, POST ๋ง ์ง์ํ๋ค.
POST ์ ์ก - ์ ์ฅ
<form action="/save" method="post">
<input type="text" name="name"/>
<input type="text" name="age"/>
<button type="submit">์ ์ก</button>
</form>
์ด๋ฌํ HTML Form ์ด ์๋ค๊ณ ํ์ ๋ ํด๋ผ์ด์ธํธ๊ฐ input์ ์ฑ์ฐ๊ณ ์ ์ก ๋ฒํผ์ ๋๋ฅด๊ฒ ๋ ๋ ๋ธ๋ผ์ฐ์ ์์ ๋ฌด์จ์ผ์ด ์๊ธธ๊น?
์น ๋ธ๋ผ์ฐ์ ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋์๊ฐ์ด HTTP ๋ฉ์์ง๋ก ๋ณ๊ฒฝํ์ฌ ์๋ฒ๋ก ์ ์กํ๋ค.
POST /save HTTP/1.1 (์์๋ผ์ธ)
Host: localhost:8080 (header)
Content-Type: application/x-www-form-urlencoded (header)
name=aejeong&age=28 (body)
Content-Type ์ ๋ญ๊น?
์ ์ก ๋ฐ์ดํฐ๋ฅผ url encoding ์ฒ๋ฆฌํ๋ค๋ ์๋ฏธ์ด๋ค. ์๋ฅผ ๋ค์ด asc๊น -> abc%EA%B9%80
๋ง์ฝ form์ method="get" ์ผ๋ก ๋ณ๊ฒฝํ๋ค๋ฉด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ด ์๋์ ๊ฐ์ด ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ๋ค์ด๊ฐ๋๋ค.
GET /save?name=aejeong&age=28 HTTP/1.1
Host: localhost:8080
ํ์ง๋ง ์ ์ฅํ๋ ๋ก์ง์ ์ฌ์ฉํ์ง ์๊ณ ์กฐํํ ๋๋ง ์ฌ์ฉํ๋๊ฒ์ด๋ค. ์ฃผ์!
4. HTML Form ๋ฐ์ดํฐ ์ ์ก
multipart/form-data
๋ค๋ฅธ ์ข ๋ฅ์ ์ฌ๋ฌ ํ์ผ๊ณผ ํผ์ ๋ด์ฉ ํจ๊ป ์ ์ก ๊ฐ๋ฅ , ์ฃผ๋ก ๋ฐ์ด๋๋ฆฌ ํ์ผ ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ค.
HTTP API ๋ฐ์ดํฐ ์ ์ก
1. ์๋ฒ to ์๋ฒ
- ๋ฐฑ์๋ ์์คํ ํต์
2. ์ฑ ํด๋ผ์ด์ธํธ
- ์์ดํฐ, ์๋๋ก์ด๋
3. ์น ํด๋ผ์ด์ธํธ
- HTML ์์ Form ์กด์ก ๋์ ์๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ํต์ ์ ์ฌ์ฉ(AJAX)
- React, VueJs ๊ฐ์ ์น ํด๋ผ์ด์ธํธ์ API ํต์
4. POST, PUT, PATCH ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ์ก
5. GET : ์กฐํ, ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ดํฐ ์ ๋ฌ
6. Content-Type: application/json์ ์ฃผ๋ก ์ฌ์ฉํ๋ค. -> ์ฌ์ค์ ํ์ค
- TEXT,XML,JSON ๋ฑ๋ฑ
HTTP API ์ค๊ณ
1. HTTP API - ์ปฌ๋ ์
- POST ๊ธฐ๋ฐ ๋ฑ๋ก
- ์) ํ์ ๊ด๋ฆฌ API ์ ๊ณต
ํด๋ผ์ด์ธํธ๋ ๋ฑ๋ก๋ ๋ฆฌ์์ค์ URI๋ฅผ ๋ชจ๋ฅธ๋ค. -> ์๋ฒ๊ฐ ์๋ก ๋ฑ๋ก๋ ๋ฆฌ์์ค URI๋ฅผ ์์ฑํด์ค๋ค. (Location: members/100)
์ปฌ๋ ์ ์ด๋?
์๋ฒ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ๋๋ ํ ๋ฆฌ, ์๋ฒ๊ฐ ๋ฆฌ์์ค URI๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌ ์) /members
2. HTTP API - ์คํ ์ด
- PUT ๊ธฐ๋ฐ ๋ฑ๋ก
- ์) ์ ์ ์ปจํ ์ธ ๊ด๋ฆฌ, ์๊ฒฉ ํ์ผ ๊ด๋ฆฌ
์๋ฅผ๋ค์ด ํ์ผ ๊ด๋ฆฌ ์์คํ ์์ ํ์ผ๋ฑ๋ก์ ํ ๋ ๊ธฐ์กดํ์ผ์ ์ง์ฐ๊ณ ๋์ฒด ํ๊ฑฐ๋, ์์ ๋ ์์ฑํ๊ฒ ํ๋ ค๋ฉด PUT method๋ฅผ ์ฌ์ฉํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค URI๋ฅผ ์๊ณ ์์ด์ผ ํ๋ค. -> ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ๋ฆฌ์์ค์ URI๋ฅผ ์ง์ ํ๋ค. (์คํ ์ด)
PUT /files/star.jpg
์คํ ์ด๋?
ํด๋ผ์ด์ธํธ๊ฐ ๊ด๋ฆฌํ๋ ๋ฆฌ์์ค ์ ์ฅ์
ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ URI๋ฅผ ์๊ณ ๊ด๋ฆฌ ์) /files/start.jpg
3. HTTP FORM ์ฌ์ฉ
- ์น ํ์ด์ง ํ์ ๊ด๋ฆฌ
- GET, POST๋ง ์ง์
HTML FORM ์ฌ์ฉ
HTML FORM์ GET,POST๋ง ์ง์ํด์ ์ ์ฝ์ด ์๋ค.
์ด๋ฐ ์ ์ฝ์ผ๋ก ์ปจํธ๋กค URI ๋ฅผ ์ฌ์ฉํ๋๋ฐ. ๋์ฌ๋ก ๋ ๋ฆฌ์์ค ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ค๋ ๋ป์ด๋ค.
POST ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ /members/new , /members/{id}/delete ๋ฑ HTTP ๋ฉ์๋๋ก ํด๊ฒฐํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. -> ์ค๋ฌด์์๋ ์ ๋งคํ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๋ง์ด ์ฌ์ฉํ๋ค. ํ์ง๋ง ๋ฌด์ํ๊ฒ ์ฐ์ง๋ง๊ณ ์ต๋ํ ๋ฆฌ์์ค URI๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ ์ ๋งคํ ๋๋ง ์ฌ์ฉํ๋ค.
API ์ค๊ณ์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฐ๋
restfulapi.net/resource-naming/
'๐ป Computer Science' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
07. HTTP ์น ๊ธฐ๋ณธ ์ง์ - HTTP ํค๋ ๊ฐ์ (0) | 2021.05.06 |
---|---|
06. HTTP ์น ๊ธฐ๋ณธ ์ง์ - HTTP ์ํ์ฝ๋ ์๊ฐ (0) | 2021.05.04 |
04. HTTP ์น ๊ธฐ๋ณธ ์ง์ - HTTP API (0) | 2021.05.03 |
03. HTTP ์น ๊ธฐ๋ณธ ์ง์ - ๋ชจ๋ ๊ฒ์ด HTTP (0) | 2021.05.03 |
02. HTTP ์น ๊ธฐ๋ณธ ์ง์ - URI (0) | 2021.05.03 |