HTTP API ๋ฉ์๋
์๊ตฌ์ฌํญ
- ํ์ ๋ชฉ๋ก ์กฐํ
- ํ์ ์กฐํ
- ํ์ ๋ฑ๋ก
- ํ์ ์์
- ํ์ ์ญ์
์ผ๋ฐ์ ์ผ๋ก ์ด๋ ๊ฒ ์๊ฐํ ์ ์๋ค.
API URL ์ค๊ณ
- ํ์ ๋ชฉ๋ก ์กฐํ → /read-member-list
- ํ์ ์กฐํ → /read-member-by-id
- ํ์ ๋ฑ๋ก → /create-member
- ํ์ ์์ → /update-member
- ํ์ ์ญ์ → /delete-member
ํ์ง๋ง, ์ด๋ ์ข์ ์ค๊ณ๊ฐ ์๋๋ค. URI์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ฆฌ์์ค ์๋ณ์ด๋ค.
๋ฆฌ์์ค์ ๋ํด ์์๋ณด์.
๋ฆฌ์์ค๋?
ํ์์ ๋ฑ๋ก,์์ ,์กฐํ ํ๋๊ฒ์ ๋ฆฌ์์ค๊ฐ ์๋๋ค. ๋ฆฌ์์ค๋ “ํ์” ๊ทธ ์์ฒด๊ฐ ๋ฆฌ์์ค์ด๋ค.
๊ณ์ธต ๊ตฌ์กฐ ์์๋ฅผ ์ปฌ๋ ์ ์ผ๋ก ๋ณด๊ณ ๋ณต์ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ex) members
- ํ์ ๋ชฉ๋ก ์กฐํ → /members
- ํ์ ์กฐํ → /members/{id}
- ํ์ ๋ฑ๋ก → /members/{id}
- ํ์ ์์ → /members/{id}
- ํ์ ์ญ์ → /members/{id}
์ด? ์กฐํ,๋ฑ๋ก,์์ ,์ญ์ URI๊ฐ ๋ชจ๋ ๊ฐ์๋ฐ ๊ตฌ๋ถ์ ์ด๋ป๊ฒ ํด?
๋ค์ํ๋ฒ ๋งํ์ง๋ง URI๋ ๋ฆฌ์์ค๋ง ์๋ณํ๋ค.
์ฐ๋ฆฌ๋ ๋ฆฌ์์ค์ ํ์๋ฅผ ๋ถ๋ฆฌํด์ผํ๋ค.
- ๋ฆฌ์์ค: ํ์ - ๋ช ์ฌ (N)
- ํ์: ์กฐํ, ๋ฑ๋ก, ์ญ์ , ๋ณ๊ฒฝ - ๋์ฌ (V)
์ ์ด์ ๊ฐ๊ฐ์ ํ์๋ผ๋ฆฌ ๊ตฌ๋ถํด ๋ณด์.
HTTP ๋ฉ์๋
- GET: ๋ฆฌ์์ค ์กฐํ
- POST: ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฃผ๋ก ๋ฑ๋ก์ ์ฌ์ฉํ๋ค.
- PUT: ๋ฆฌ์์ค๋ฅผ ๋์ฒดํ๋ฉฐ, ํด๋น ๋ฆฌ์์ค๊ฐ ์์ ๊ฒฝ์ฐ ์์ฑํ๋ค.
- PATCH: ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ
- DELETE: ๋ฆฌ์์ค ์ญ์
1. GET
๋ฆฌ์์ค ์กฐํ์ ์ฌ์ฉํ๋ฉฐ, ์๋ฒ์ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ( ex) ๊ฒ์์์ง์ ๋๊ธธ ๋ฐ์ดํฐ)๋ ์ฟผ๋ฆฌ(์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, ์ฟผ๋ฆฌ ์คํธ๋ง)์ ํตํด ์ ๋ฌํ๋ค.
๋ฉ์ธ์ง ๋ฐ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ํ ์๋ ์์ง๋ง, ๊ถ์ฅํ์ง ์๋๋ค.
(1) ๋ฉ์์ง ์ ๋ฌ - ํด๋ผ์ด์ธํธ๊ฐ 100๋ฒ ์ ์ ๋ฅผ ์์ฒญํ๋ค.
(2) ์๋ฒ๋์ฐฉ - ์๋ฒ์ GET ๋ฉ์์ง ๋์ฐฉ
(3) ์๋ต๋ฐ์ดํฐ - ์๋ฒ์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ต ๋ฉ์์ง๋ฅผ ๋ง๋ค์ด ํด๋ผ์ด์ธํธ์ ๋ณด๋ธ๋ค.
ex) HTTP/version 200 OK Content-Type: ํ์ ๋ช , Content-Length: ๊ธธ์ด
2. POST
ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์์ฒญ ๋ณด๋ผ๋, ์ ๋ณด๋ฅผ ์ค๋ค. ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ์๋ฒ๋ก ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค.
์๋ฒ์์๋ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
(1) ๋ฉ์์ง ์ ๋ฌ - POST ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ณด๋ธ๋ค.
๋ฏธ๋ฆฌ ์ฝ์์ ํด๋๋๋ค.
ex) ์๋ฒ์ ์ฅ์์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ /members๋ก ์์ฒญ์ด ์ค๋ฉด ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ถ์ ์ผ๋ก ์ ๊ท๋ฑ๋กํ๊ธฐ๋ก ์ฝ์ํ๋ค.
(2) ์ ๊ท ๋ฆฌ์์ค ์์ฑ - ์๋ฒ๋ POST๋ก ์ ๊ท ๋ฑ๋กํ๋ ์์ฒญ์ด๋ ๊ฑธ ์๊ณ ์ฒ๋ฆฌํ๋ค.
ex) 100๋ฒ์ด๋ผ๋ ์ ๊ท ๋ฆฌ์์ค ์๋ณ์๊ฐ ์์ฑ๋จ.
(3) ์๋ต ๋ฐ์ดํฐ - ์ ๊ท ์์ ์์ฑ์ 200,201๋ก ์๋ตํ๊ณ , ์์์ด ์์ฑ๋ ๊ฒฝ๋ก์ ๋ฐ์ดํฐ๋ ํจ๊ป ๋ณด๋ผ ์ ์๋ค.
201์ ๊ฒฝ์ฐ Location: /members/100์ผ๋ก ์์น๋ ์๋ ค์ค๋ค.
POST๋ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น?
POST๋ ์์ฒญ์ ๋ค์ด์๋ ํํ์ ์ฒ๋ฆฌํ๋ ์์ฒญ ๋ฉ์๋๋ค. ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ์ด์ฉ๋๋ค.
- HTML ์์์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ ๋ธ๋ก์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ก์ธ์ค์ ์ ๊ณตํ๋ค.
ex)HTML ํผ์ ์ ๋ ฅํ ์ ๋ณด๋ก ํ์ ๊ฐ์ , ์ฃผ๋ฌธ
- ๊ฒ์ํ, ๋ด์ค, ๋ธ๋ก๊ทธ ๊ทธ๋ฃน์ ๋ฉ์์ง๋ฅผ ๊ฒ์ํ๋ค.
ex) ๊ฒ์ํ ๊ธ์ฐ๊ธฐ, ๋๊ธ์ฐ๊ธฐ
- ์ ๋ฆฌ์์ค ์์ฑ
ex) ์ ๊ท ์ฃผ๋ฌธ ์์ฑ
- ๊ธฐ์กด ์์์ ๋ฐ์ดํฐ ์ถ๊ฐ
ex) ๋ฌธ์ ๋์ ๋ด์ฉ ์ถ๊ฐ
๋ฆฌ์์ค URI์ POST์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ ํด์ง๊ฒ์ด ์๊ธฐ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๋ฆฌ์์ค๋ง๋ค ์ ํด์ค์ผ ํ๋ค.
์ ๋ฆฌํด๋ณด๋ฉด,
1)์๋ฒ๊ฐ ์์ง ์๋ณํ์ง ์์ ์ ๋ฆฌ์์ค๋ฅผ ์์ฑ, ๋ฑ๋กํ๊ณ ,
2)์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ๋จ์ ๋ฐ์ดํฐ ์์ฑ,๋ณ๊ฒฝ์ด ์๋ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋๊ฒฝ์ฐ
ex) ์ฃผ๋ฌธ → ๊ฒฐ์ ์๋ฃ → ๋ฐฐ๋ฌ ์์ → ๋ฐฐ๋ฌ ์๋ฃ ๊ฐ์ ํ๋ก์ธ์ค ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ
- ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋์ง ์์ ์ ์๋ค.
ex)POST /orders/{orderId}/start-delivery
์์์ ๋ฆฌ์์ค ๋จ์๋ก ํด์ ๋ง๋ค์๊ณ ํ๋๋ฐ, ๋ถ์กฑํ๋ค๋ฉด ์ด๋ ๊ฒ๋ผ๋ ํด์ผํ๋ค.
- ๋ค๋ฅธ ๋ฉ์๋๋ก ์ฒ๋ฆฌํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ
์ ๋งคํ๊ฒฝ์ฐ POST๋ฅผ ์ฐ๋ฉด ๋๋ค. ๋จ, ์กฐํ์ ๊ฒฝ์ฐ GET์ ์ฌ์ฉํ๋ฉด ์บ์ฑ์ ํ ์ ์๊ธฐ์ GET์ ์ฐ๋ ์ถ์ธ์ด๋ค.
3. PUT = ๋ฎ์ด์ฐ๊ธฐ
- ๋ฆฌ์์ค๋ฅผ ๋์ฒดํ๋ค. ์.์ .ํ
/members์ 100๋ฒ์ด๋ผ๋ ๋ฆฌ์์ค๊ฐ ์๋ค๋ฉด? ๋ฆฌ์์ค๋ฅผ ๋์ฒดํ๋ค.
/members์ 100๋ฒ์ด๋ผ๋ ๋ฆฌ์์ค๊ฐ ์๋ค๋ฉด? ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ค.
์ ๋งคํ๋ฉด POST ์ฐ๋ผ๋ฉฐ, ๊ทธ๋ผ PUT๋ ํ์์๋๊ฑฐ ์๋๊ฐ?
PUT์ ๊ฒฝ์ฐ POST์ ๋ฌ๋ฆฌ ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค ์์น๋ฅผ ์๊ณ URI๋ฅผ ์ง์ ํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ /mebers/100๋ฒ์ ๋ฃ๋๊ฒ
์๊ฒ POST์๋ค. /members ์๋ค๊ฐ ๋ฃ์ผ๋ฉด ํด๋ผ์ด์ธํธ๋ ๋ฆฌ์์ค๊ฐ 100๋ฒ์ ๋ง๋ค์ด์ง์ง, 101๋ฒ์ ๋ง๋ค์ด์ง์ง ๋ชจ๋ฅธ๋ค.
(1) 100๋ฒ ์ ์ ์๊ฒ ๋ฆฌ์์ค๋ฅผ ๋ณด๋ด๊ฒ๋ค๊ณ ์์ฒญ๋ณด๋ธ๋ค.
(2-1) ์ด๋, ๊ธฐ์กด์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ์์ ํ ๋์ฒด๋๋ค.
(2-2) ์ด๋, ๊ธฐ์กด์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ์ ๊ท๋ก ์์ฑํ๋ค.
(3-1) ๋ง์ฝ ๋ถ๋ถ ์์ฒญ์ ๋ณด๋ธ๋ค๋ฉด
(3-2) ์๋ก์ด ๋ฐ์ดํฐ๋ก ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋์ฒดํ๋ค.
๊ทธ๋ ๊ธฐ์ PUT์ ์์ ๋ณด๋ค๋ ๊ฐ์๋ผ์ด๋ค. ๋ผ๋ ํํ์ด ๋ ์ ์ ํ๋ค.
๋ ์์ ํ๊ณ ์ถ์๋ฐ?
4. PATCH
(1-1) ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ
(1-2) ๋ถ๋ถ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋, ๊ทธ ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝ๋๋ค.
5. DELETE
๋ฆฌ์์ค ์ ๊ฑฐ - ๋ 100๋ฒ ์ง์ธ๋
๊ฒฐ๋ก ์? POST๋ ๋ฌด์ ์ด๋ค.
HTTP ๋ฉ์๋์ ์์ฑ
1. ์์ - ํธ์ถํด๋ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ์ฑ์ง
๋ณ๊ฒฝ์ด ์ผ์ด๋๋ฉด ์์ ํ์ง ์์ ๊ฒ
GET์ ๋จ์ ์กฐํ๋ง ํ๊ธฐ ๋๋ฌธ์ ์์ ํ๋ค. POST, DELETE, PATCH, PUT์ ๋น์ฐํ ์์ ํ์ง ์๋ค.
GET์ด ์์ ํ๋ค๊ณ ํด๋ ๊ณ์ ํธ์ถํด์ ์ ๋ง์ ๋ก๊ทธ๋ฅผ ์๋ค๊ฐ ์๋ฒ๊ฐ ํฐ์ ธ๋ฒ๋ฆฐ๋ค๋ฉด?
→ ์์ ์ ํด๋น ๋ฆฌ์์ค๊ฐ ๋ณํ๋์ง๋ง ๊ณ ๋ คํ๋ค. ๊ทธ ๋ถ๋ถ๊น์ง ๊ณ ๋ คํ์ง ์๋๋ค.
2. ๋ฉฑ๋ฑ - ํ ๋ฒ ํธ์ถํ๋ , ๋ ๋ฒ ํธ์ถํ๋ , 100๋ฒ ํธ์ถํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ ๊ฒ
- GET: ํ๋ฒํธ์ถํ๋ ~ ๊ฒฐ๊ณผ๊ฐ ๋๊ฐ๋ค.
- PUT: ๋๊ฐ์ ํ์ผ์ ๋๊ฐ์ ์์ฒญ์ ํ๋ฉด ๊ธฐ์กด ๊ฒ์ ๋ ๋ฆฌ๊ณ ์๋ก์ด ๊ฒ์ ๋ฎ๊ธฐ ๋๋ฌธ์ ํญ์ ๊ฐ๋ค.
- DELETE: ์ญ์ ํ๋ฉด ์ง์์ง. ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ํด๋ ์ต์ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
- POST: ๋ฉฑ๋ฑ ์๋๋ค. ์๋ฅผ๋ค์ด ๊ฒฐ์ ์์คํ ์ ๋๋ฒ ํธ์ถํ๋ฉด ์ค๋ณต ๊ฒฐ์ ์ด๋ค.
๋ฉฑ๋ฑ ํ์ฉ
- ์๋ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ
ex) DELETE ํธ์ถํ๋๋ฐ ์๋ฒ์์ ์๋ต์ด ์์ด์, ๋ค์ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์๋ ํ๋ค. ์ ? ๋ฉฑ๋ฑํ๋๊น
- ์๋ฒ๊ฐ TIMEOUT ๋ฑ์ผ๋ก ์ ์ ์๋ต์ ์ฃผ์ง ๋ชปํ์ ๋, ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ ์์ฒญ์ ํด๋ ๋๋์ง์ ๋ํ ํ๋จ ๊ทผ๊ฑฐ๊ฐ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ์์ฒญ ์ค๊ฐ์ ๋ค๋ฅธ ๊ณณ์์ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํด๋ฒ๋ฆฌ๋ฉด? ์ด๋ฌ๋ฉด ๋ฉฑ๋ฑ์ด ์๋๊ฒ ์๋๊ฐ?
- ์ฌ์ฉ์ 1: GET username: A, age: 20
- ์ฌ์ฉ์ 2: PUT username: A, age: 30
- ์ฌ์ฉ์ 1: GET username: A, age:30
๋ฐ๋๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฒ ๋๋ค.
๋ฉฑ๋ฑ์ ์ธ๋ถ ์์ธ์ผ๋ก ์ค๊ฐ์ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ ๊น์ง๋ ๊ณ ๋ คํ์ง ์๋๋ค.
3. ์บ์๊ฐ๋ฅ - ์๋ต ๊ฒฐ๊ณผ๋ก ์จ ๋ฆฌ์์ค๋ฅผ ์บ์์ ์ ์ฅํด์ ์ฌ์ฉํด๋ ๋๋?
์บ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์๋ณธ ๋ฆฌ์์ค์ ํค๊ฐ ๋ง์์ผํจ. POST์ PATCH๋ ๋ณธ๋ฌธ ๋ด์ฉ๊น์ง ๊ณ ๋ คํ๊ธฐ๊ฐ ๋ณต์กํ์ง๋ง,
GET์ url๋ง ํค๋ก ์ก๊ณ ์บ์ฑํ๋ฉด ๋๊ธฐ์ ์ฌํํ๋ค.
์ค๋ฌด์์๋ GET๋ง ์บ์๋ก ์ฌ์ฉํ๋ค.
'๐ผ ๋ฐฑ์ค๋ > HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
6. HTTP ์ํ ์ฝ๋ (1) | 2024.01.09 |
---|---|
5. HTTP ๋ฉ์๋ ํ์ฉ (1) | 2024.01.09 |
3. HTTP ๊ธฐ๋ณธ (0) | 2024.01.09 |
2. URI์ ์น ๋ธ๋ผ์ฐ์ ์์ฒญ ํ๋ฆ (0) | 2024.01.09 |
1. ์ธํฐ๋ท ๋คํธ์ํฌ (1) | 2024.01.09 |