[HTTP] method GET,POST,PUT,DELETE

HyeJeanΒ·2024λ…„ 3μ›” 11일
0
post-thumbnail

πŸ”Ž HTTP method

γ€€REST(Representational State Transfer) λŠ” μ›Ή μ•„ν‚€ν…μ²˜μ˜ ν˜•μ‹μœΌλ‘œ, μžμ›μ„ μ •μ˜ν•˜κ³ , μžμ›μ— λŒ€ν•œ μƒνƒœλ₯Ό μ£Όκ³ λ°›λŠ” 방식을 κ·œμ •ν•œ μ•„ν‚€ν…μ²˜μ΄λ‹€. RESTλŠ” λΆ„μ‚° μ›Ή μ‹œμŠ€ν…œμ„ μœ„ν•œ ν‘œμ€€μ μΈ μ ‘κ·Ό λ°©μ‹μœΌλ‘œ μ‚¬μš©λœλ‹€.

γ€€RESTful APIλŠ” REST μ•„ν‚€ν…μ²˜λ₯Ό λ”°λ₯΄λŠ” μ›Ή μ„œλΉ„μŠ€μ˜ ν‘œμ€€μ΄λ©°, 주둜 HTTP ν”„λ‘œν† μ½œμ„ 기반으둜 κ΅¬ν˜„λœλ‹€. μ›Ή μ„œλΉ„μŠ€μ˜ ν‘œμ€€μœΌλ‘œ μ‚¬μš©λ˜λŠ” RESTful APIλŠ” HTTP method(GET, POST, PUT, DELETE λ“±)λ₯Ό μ‚¬μš©ν•˜μ—¬ μžμ›μ— λŒ€ν•œ CRUD(Create, Read, Update, Delete) μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. RESTful APIλŠ” κ°„λ‹¨ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜μ—¬ λ‹€μ–‘ν•œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 톡신을 λ•λŠ”λ‹€.

γ€€HTTP(HyperText Transfer Protocol)λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 톡신을 μœ„ν•œ ν”„λ‘œν† μ½œμ΄λ‹€. HTTP λ©”μ„œλ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ—κ²Œ μ–΄λ–€ λ™μž‘μ„ μˆ˜ν–‰ν•  것인지λ₯Ό μ§€μ •ν•˜λŠ”λ° μ‚¬μš©ν•œλ‹€. HTTP λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œ μ›Ή μ„œλΉ„μŠ€μ—μ„œ ν•„μš”ν•œ 데이터λ₯Ό μš”μ²­ν•˜κ±°λ‚˜ μ „μ†‘ν•œλ‹€.


1) GET (read)

γ€€μ„œλ²„λ‘œλΆ€ν„° 데이터λ₯Ό κ°€μ Έμ˜¬ λ•Œ μ‚¬μš©λ˜λ©°, μš”μ²­λœ λ°μ΄ν„°λŠ” URL의 쿼리 λ¬Έμžμ—΄μ— 포함될 수 μžˆλ‹€. GET μš”μ²­μ€ 주둜 μ„œλ²„μ— 데이터λ₯Ό μ „μ†‘ν•˜μ§€ μ•Šκ³  λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•  λ•Œ μ‚¬μš©λœλ‹€. μ„œλ²„μ˜ μƒνƒœλ‚˜ 데이터λ₯Ό λ³€κ²½μ‹œν‚€μ§€ μ•ŠμœΌλ―€λ‘œ idempotentν•œλ‹€. λ™μΌν•œ GET μš”μ²­μ„ μ—¬λŸ¬ 번 μˆ˜ν–‰ν•΄λ„ 항상 λ™μΌν•œ 응닡을 ν•œλ‹€.

Body: Body 값이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€.
Content-Type: Content-Type ν—€λ”λŠ” GET λ©”μ†Œλ“œμ— ν•„μˆ˜λŠ” μ•„λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ 경우 ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ 데이터λ₯Ό μ„œλ²„κ°€ μ–΄λ–€ ν˜•μ‹μœΌλ‘œ λ°˜ν™˜ν• μ§€λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ μ‚¬μš©λœλ‹€.

2) POST (create)

γ€€ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 데이터λ₯Ό 보낼 λ•Œ μ‚¬μš©λœλ‹€. 주둜 HTML의 <form> μš”μ†Œμ—μ„œ μ‚¬μš©λ˜λ©°, λ°μ΄ν„°λŠ” 본문에 ν¬ν•¨λœλ‹€.

Body: Body 값은 POST λ°μ΄ν„°λ‘œ μ‚¬μš©λ˜λ©°, 주둜 HTML 폼 λ°μ΄ν„°λ‚˜ JSON ν˜•μ‹μ˜ 데이터λ₯Ό 전솑할 λ•Œ μ‚¬μš©λœλ‹€.
Content-Type: μ „μ†‘λ˜λŠ” λ°μ΄ν„°μ˜ ν˜•μ‹μ„ λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ Content-Type 헀더가 μ‚¬μš©λœλ‹€. (application/x-www-form-urlencoded, multipart/form-data, application/json λ“±)

3) PUT (update)

γ€€μ„œλ²„μ— μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ 기쑴의 λ¦¬μ†ŒμŠ€λ₯Ό μˆ˜μ •ν•  λ•Œ μ‚¬μš©λœλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” λ¦¬μ†ŒμŠ€μ˜ URIλ₯Ό μ§€μ •ν•˜κ³  ν•΄λ‹Ή URI에 λŒ€ν•œ 데이터λ₯Ό μ „μ†‘ν•œλ‹€. λ™μΌν•œ λ°μ΄ν„°λ‘œ μ—¬λŸ¬ 번 PUT을 μˆ˜ν–‰ν•΄λ„ μ΅œμ’…μ μœΌλ‘œλŠ” λ™μΌν•œ μƒνƒœλ‘œ μœ μ§€λœλ‹€.(idempotent)

Body: μ—…λ°μ΄νŠΈν•  데이터가 Body 값에 ν¬ν•¨λœλ‹€.
Content-Type: μ—…λ°μ΄νŠΈλ˜λŠ” λ°μ΄ν„°μ˜ ν˜•μ‹μ„ λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ Content-Type 헀더가 μ‚¬μš©λœλ‹€.

4) DELETE (delete)

γ€€μ„œλ²„μ—μ„œ μ§€μ •λœ λ¦¬μ†ŒμŠ€λ₯Ό μ‚­μ œν•  λ•Œ μ‚¬μš©λœλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ‚­μ œν•  λ¦¬μ†ŒμŠ€μ˜ URIλ₯Ό μ§€μ •ν•˜μ—¬ μ„œλ²„μ— μš”μ²­μ„ 보낸닀. λ™μΌν•œ DELETE μš”μ²­μ„ μ—¬λŸ¬ 번 μˆ˜ν–‰ν•˜λ”λΌλ„ μ‚­μ œλœ μžμ›μ€ μ—†μœΌλ―€λ‘œ κ²°κ³Όκ°€ λ™μΌν•˜λ‹€.(idempotent)

Body: μ‚­μ œν•  데이터λ₯Ό λͺ…μ‹œν•˜λŠ” Body 값이 포함될 수 μžˆμ§€λ§Œ, Body 값이 λ¬΄μ‹œλ˜κΈ°λ„ ν•œλ‹€.
Content-Type: 일반적으둜 μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ‹€.


5) PATCH

γ€€PUT λ©”μ„œλ“œμ™€ λΉ„μŠ·ν•˜μ§€λ§Œ, λ¦¬μ†ŒμŠ€μ˜ μΌλΆ€λ§Œμ„ μˆ˜μ •ν•  λ•Œ μ‚¬μš©λœλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” μˆ˜μ •ν•  λ¦¬μ†ŒμŠ€μ˜ URIλ₯Ό μ§€μ •ν•˜κ³  μˆ˜μ •ν•  데이터λ₯Ό μš”μ²­ 본문에 ν¬ν•¨ν•˜μ—¬ μ„œλ²„μ— μš”μ²­μ„ 보낸닀.

6) HEAD

γ€€GET λ©”μ„œλ“œμ™€ λΉ„μŠ·ν•˜μ§€λ§Œ, 주둜 λ¦¬μ†ŒμŠ€μ˜ 메타데이터λ₯Ό 확인할 λ•Œ μ‚¬μš©ν•œλ‹€. λ¦¬μ†ŒμŠ€μ˜ 헀더 μ •λ³΄λ§Œμ„ λ°˜ν™˜ν•˜κ³  μ‹€μ œ λ°μ΄ν„°λŠ” λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€. GETκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ idempotentν•œλ‹€.

7) OPTIONS

γ€€μ„œλ²„κ°€ μ§€μ›ν•˜λŠ” λ©”μ„œλ“œλ₯Ό ν™•μΈν•˜κ±°λ‚˜ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ νŠΉλ³„ν•œ μ˜΅μ…˜μ„ μš”μ²­ν•  λ•Œ μ‚¬μš©ν•œλ‹€. Idempotentν•œλ‹€.

8) TRACE

γ€€μš”μ²­μ΄ μ„œλ²„μ— λ„λ‹¬ν–ˆμ„ λ•Œ μ–΄λ–»κ²Œ λ³€κ²½λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄, μš”μ²­ λ©”μ‹œμ§€λ₯Ό μ„œλ²„μ—κ²Œ 되돌렀 받을 λ•Œ μ‚¬μš©λœλ‹€. λ³΄μ•ˆμƒ 이유둜 λŒ€λΆ€λΆ„ λΉ„ν™œμ„±ν™”λ˜μ–΄ μžˆλ‹€.

9) CONNECT

γ€€ν”„λ‘μ‹œλ₯Ό 톡해 연결을 μ„€μ •ν•  λ•Œ μ‚¬μš©ν•œλ‹€. 주둜 HTTPS의 터널링을 μœ„ν•΄ μ‚¬μš©ν•œλ‹€.



πŸ€” Idempotent λ©±λ“±μ„±

γ€€HTTP λ©”μ†Œλ“œμ˜ Idempotent(λ©±λ“±μ„±) 은 λ™μΌν•œ μš”μ²­μ„ μ—¬λŸ¬ 번 μˆ˜ν–‰ν•˜λ”λΌλ„ κ·Έ κ²°κ³Όκ°€ λ™μΌν•˜κ²Œ μœ μ§€λ˜λŠ” νŠΉμ„±μ„ κ°–λŠ”λ‹€. 멱등성은 HTTP λ©”μ„œλ“œμ˜ μ•ˆμ „μ„±(safe)κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ μ•½κ°„ λ‹€λ₯΄λ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ λ„€νŠΈμ›Œν¬ 문제, νƒ€μž„μ•„μ›ƒ λ“±μœΌλ‘œ 인해 이전 μš”μ²­μ΄ μ‹€νŒ¨ν•˜μ—¬ λ™μΌν•œ μš”μ²­μ„ λ‹€μ‹œ 보내더라도 μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•œλ‹€.

γ€€GET, HEAD, PUT, DELETE, OPTIONSκ°€ Idempotentλ₯Ό κ°–λŠ”λ‹€.




πŸ€” POST vs PUT

  • POST

    -주둜 μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€λ₯Ό 생성할 λ•Œ μ‚¬μš©
    -μš”μ²­μ΄ μˆ˜ν–‰λ  λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€κ°€ μƒμ„±λ˜λ©°, μƒμ„±λœ λ¦¬μ†ŒμŠ€μ˜ URIλŠ” μ„œλ²„μ— μ˜ν•΄ 결정됨
    -주둜 데이터λ₯Ό 전솑할 λ•Œ μ‚¬μš©λ˜λ©°, μ„œλ²„κ°€ μš”μ²­μ„ μ²˜λ¦¬ν•˜λ©΄ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€κ°€ 생성됨

  • PUT

    -주둜 νŠΉμ • λ¦¬μ†ŒμŠ€λ₯Ό μ—…λ°μ΄νŠΈν•  λ•Œ μ‚¬μš©
    -μš”μ²­λœ λ¦¬μ†ŒμŠ€κ°€ μ„œλ²„μ— 이미 μ‘΄μž¬ν•œλ‹€κ³  κ°€μ •ν•˜κ³ , ν•΄λ‹Ή λ¦¬μ†ŒμŠ€λ₯Ό μ—…λ°μ΄νŠΈν•œλ‹€. λ§Œμ•½ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμœΌλ©΄ μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€λ₯Ό 생성함
    -PUT μš”μ²­μ€ idempotentν•˜λ©°, 같은 μš”μ²­μ„ μ—¬λŸ¬ 번 보내도 항상 λ™μΌν•œ κ²°κ³Όλ₯Ό λ°˜ν™˜

πŸ€” PUT vs PATCH

  • PUT

    -λ¦¬μ†ŒμŠ€ 전체λ₯Ό μ—…λ°μ΄νŠΈ = μš”μ²­λœ λ¦¬μ†ŒμŠ€μ˜ 전체 λ‚΄μš©μ„ μƒˆλ‘œμš΄ λ°μ΄ν„°λ‘œ λŒ€μ²΄
    -PUT μš”μ²­μ€ λ¦¬μ†ŒμŠ€μ˜ λͺ¨λ“  ν•„λ“œλ₯Ό μ œκ³΅ν•΄μ•Ό 함. λ§Œμ•½ 일뢀 ν•„λ“œλ§Œ μ œκ³΅λœλ‹€λ©΄ λˆ„λ½λœ ν•„λ“œλŠ” λΉ„μ–΄μžˆλŠ” κ°’μœΌλ‘œ μ—…λ°μ΄νŠΈ

  • PATCH

    -λ¦¬μ†ŒμŠ€μ˜ 일뢀λ₯Ό μ—…λ°μ΄νŠΈ, PUTκ³Ό 달리 전체 λ¦¬μ†ŒμŠ€λ₯Ό λŒ€μ²΄ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 일뢀 ν•„λ“œλ§Œ μ—…λ°μ΄νŠΈ
    -PATCH μš”μ²­μ€ λ¦¬μ†ŒμŠ€μ˜ νŠΉμ • ν•„λ“œλ§Œμ„ μ œκ³΅ν•˜μ—¬ ν•΄λ‹Ή ν•„λ“œλ§Œ μ—…λ°μ΄νŠΈ. λ‹€λ₯Έ ν•„λ“œλŠ” μ•ˆ 됨
    -일뢀λ₯Ό μˆ˜μ •ν•˜λŠ” 데 μ‚¬μš©λ˜λ―€λ‘œ, μš”μ²­λœ λ°μ΄ν„°μ—λŠ” μ—…λ°μ΄νŠΈν•  ν•„λ“œλ§Œ 포함

0개의 λŒ“κΈ€