🌟 HTTP λ©”μ„œλ“œ GET, POST 정리

leehyunjuΒ·2021λ…„ 5μ›” 27일
0

λ„€νŠΈμ›Œν¬

λͺ©λ‘ 보기
3/14
post-thumbnail
post-custom-banner

HTTP λ©”μ„œλ“œ λͺ©μ°¨

(1) HTTP APIλ₯Ό λ§Œλ“€μ–΄λ³΄μž
(2) HTTP λ©”μ„œλ“œ - GET, POST
(3) HTTP λ©”μ„œλ“œ - PUT, PATCH, DELETE
(4) HTTP λ©”μ„œλ“œμ˜ 속성

πŸ’« 1. HTTP APIλ₯Ό λ§Œλ“€μ–΄λ³΄μž

문제: νšŒμ› 정보 관리 APIλ₯Ό λ§Œλ“€μ–΄λΌ

API URI 섀계λ₯Ό ν•©λ‹ˆλ‹€.

  • νšŒμ› λͺ©λ‘ 쑰회 /read-memeber-list
  • νšŒμ› 쑰회 /read-memeber-by-id
  • νšŒμ› 등둝 /create-member
  • νšŒμ› μˆ˜μ • /update-member
  • νšŒμ› μ‚­μ œ /delete-member

이것은 쒋은 URI μ„€κ³„μΌκΉŒμš” ?

κ°€μž₯ μ€‘μš”ν•œ 것은 λ¦¬μ†ŒμŠ€ μ‹λ³„μž…λ‹ˆλ‹€.

πŸ™„ API URI κ³ λ―Ό

1. λ¦¬μ†ŒμŠ€μ˜ μ˜λ―ΈλŠ” 뭘까?

  • νšŒμ›μ„ λ“±λ‘ν•˜κ³  μˆ˜μ •ν•˜κ³  μ‘°νšŒν•˜λŠ”κ²Œ λ¦¬μ†ŒμŠ€κ°€ μ•„λ‹ˆλ‹€!
    예) λ―Έλ„€λž„μ„ 캐라 -> 라고 ν•œλ‹€λ©΄ μ—¬κΈ°μ„œ 'λ―Έλ„€λž„'이 λ¦¬μ†ŒμŠ€λ‹€. (λͺ…사)
  • νšŒμ›μ΄λΌλŠ” κ°œλ… μžμ²΄κ°€ λ°”λ‘œ λ¦¬μ†ŒμŠ€λ‹€.

2. λ¦¬μ†ŒμŠ€λ₯Ό μ–΄λ–»κ²Œ μ‹λ³„ν•˜λŠ”κ²Œ μ’‹μ„κΉŒμš”?

  • νšŒμ›μ„ λ“±λ‘ν•˜κ³  μˆ˜μ •ν•˜κ³  μ‘°νšŒν•˜λŠ” 것을 λͺ¨λ‘ 배제
  • νšŒμ›μ΄λΌλŠ” λ¦¬μ†ŒμŠ€λ§Œ μ‹λ³„ν•˜λ©΄ λœλ‹€. -> νšŒμ› λ¦¬μ†ŒμŠ€λ₯Ό URI에 맀핑

κ·ΈλŸ¬λ―€λ‘œ

  • νšŒμ› λͺ©λ‘ 쑰회 /read-memeber-list
  • νšŒμ› 쑰회 /read-memeber-by-id
  • νšŒμ› 등둝 /create-member
  • νšŒμ› μˆ˜μ • /update-member
  • νšŒμ› μ‚­μ œ /delete-member

이 API URIλŠ” 쒋은 λ¦¬μ†ŒμŠ€κ°€ μ•„λ‹™λ‹ˆλ‹€. νšŒμ›μ΄λΌλŠ” λͺ…사가 λ¦¬μ†ŒμŠ€μ΄κΈ° λ•Œλ¬Έμ— μ΄λ ‡κ²Œ μ§œλŠ” 것이 λ°”λžŒμ§ ν•©λ‹ˆλ‹€.

  • νšŒμ› λͺ©λ‘ 쑰회 /memebers -> νšŒμ›μ΄λ‹ˆκΉŒ 멀버s
  • νšŒμ› 쑰회 /memebers/{id}
  • νšŒμ› 등둝 /members/{id}
  • νšŒμ› μˆ˜μ • /members/{id}
  • νšŒμ› μ‚­μ œ /members/{id}

μ—¬κΈ°μ„œ λ¦¬μ†ŒμŠ€λŠ” 'νšŒμ›' μ΄λ‹ˆκΉŒ members둜 λ¦¬μ†ŒμŠ€λ₯Ό λ§Œλ“€μ—ˆλ‹€.
ν•˜μ§€λ§Œ κ·Έ 뒀에 쑰회, 등둝, μˆ˜μ •, μ‚­μ œλŠ” μ–΄λ–»κ²Œ ꡬ뢄해 μ€˜μ•Όν• μ§€ μ•Œμ•„λ³΄μž πŸ™‚

λ¦¬μ†ŒμŠ€μ™€ ν–‰μœ„λ₯Ό 뢄리
κ°€μž₯ μ€‘μš”ν•œ 것은 λ¦¬μ†ŒμŠ€λ₯Ό μ‹λ³„ν•˜λŠ” 것이닀.

  • URIλŠ” λ¦¬μ†ŒμŠ€λ§Œ 식별! "λ―Έλ„€λž„μ„ 캐라" -> "λ―Έλ„€λž„"
  • λ¦¬μ†ŒμŠ€μ™€ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€λ₯Ό λŒ€μƒμœΌλ‘œ ν•˜λŠ” ν–‰μœ„λ₯Ό λΆ„λ¦¬ν•œλ‹€.
    (λ¦¬μ†ŒμŠ€ : νšŒμ› / ν–‰μœ„ : 쑰회, 등둝, μ‚­μ œ, λ³€κ²½)
  • λ¦¬μ†ŒμŠ€λŠ” λͺ…사, ν–‰μœ„λŠ” 동사 (λ―Έλ„€λž„μ„ 캐라)
  • ν–‰μœ„(λ©”μ„œλ“œ)λŠ” μ–΄λ–»κ²Œ κ΅¬λΆ„ν• κΉŒ ?

πŸ’« 2. HTTP λ©”μ„œλ“œ μ’…λ₯˜ (μ£Όμš” λ©”μ„œλ“œ)

  • GET : λ¦¬μ†ŒμŠ€ 쑰회
  • POST : μš”μ²­ 데이터 처리, 주둜 등둝에 μ‚¬μš©
  • PUT : λ¦¬μ†ŒμŠ€λ₯Ό λŒ€μ²΄, ν•΄λ‹Ή λ¦¬μ†ŒμŠ€κ°€ μ—†μœΌλ©΄ 생성
  • PATCH : λ¦¬μ†ŒμŠ€ λΆ€λΆ„ λ³€κ²½
  • DELETE : λ¦¬μ†ŒμŠ€ μ‚­μ œ
  • HEAD : GETκ³Ό λ™μΌν•˜μ§€λ§Œ λ©”μ‹œμ§€ 뢀뢄을 μ œμ™Έν•˜κ³ , μƒνƒœ 쀄과 ν—€λ”λ§Œ λ°˜ν™˜ν•œλ‹€.
  • OPTIONS : λŒ€μƒ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 톡신 κ°€λŠ₯ μ˜΅μ…˜(λ©”μ„œλ“œ)을 μ„€λͺ…(주둜 corsμ—μ„œ μ‚¬μš©ν•œλ‹€)
  • CONNECT : λŒ€μƒ μžμ›μœΌλ‘œ μ‹λ³„λ˜λŠ” μ„œλ²„μ— λŒ€ν•œ 터널을 μ„€μ • (거의 μ‚¬μš© X)
  • TRACE : λŒ€μƒ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ 경둜λ₯Ό 따라 λ©”μ‹œμ§€ 루프백 ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ (거의 μ‚¬μš© X)

GET

  • λ¦¬μ†ŒμŠ€ 쑰회
  • μ„œλ²„μ— μ „λ‹¬ν•˜κ³  싢은 λ°μ΄ν„°λŠ” Query(쿼리 νŒŒλΌλ―Έν„°, 쿼리 슀트링)λ₯Ό ν†΅ν•΄μ„œ 전달
  • λ©”μ‹œμ§€ λ°”λ””λ₯Ό μ‚¬μš©ν•΄μ„œ 데이터λ₯Ό 전달할 수 μžˆμ§€λ§Œ, μ§€μ›ν•˜μ§€ μ•ŠλŠ” 곳이 λ§Žμ•„μ„œ ꢌμž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

POST

  • μš”μ²­ 데이터 처리
  • λ©”μ‹œμ§€ λ°”λ””λ₯Ό 톡해 μ„œλ²„λ‘œ μš”μ²­ 데이터 전달
  • μ„œλ²„λŠ” μš”μ²­ 데이터λ₯Ό 처리
  • λ©”μ‹œμ§€ λ°”λ””λ₯Ό 톡해 λ“€μ–΄μ˜¨ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” λͺ¨λ“  κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€.
  • 주둜 μ „λ‹¬λœ λ°μ΄ν„°λ‘œ μ‹ κ·œ λ¦¬μ†ŒμŠ€ 등둝, ν”„λ‘œμ„ΈμŠ€ μ²˜λ¦¬μ— μ‚¬μš©
  • μ‹ κ·œ λ¦¬μ†ŒμŠ€ 생성

[응닡 데이터]

ν΄λΌμ΄μ–ΈνŠΈ μͺ½μ—μ„œ μ•„λž˜ λ‚΄μš©μ˜ 데이터듀을
HTTP/1.1 201 Created
Content-Type:application/json
Content-Length: 34
Location : /members/100

{
"username":"young",
"age":20
}

μ΄λ ‡κ²Œ 보내주면 μ„œλ²„μ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈ 데이터 λ‚΄μš©λ“€μ΄ μž…λ ₯λ˜μ„œ
/members/100 멀버쀑 100번 μ§Έλ₯Ό μ‘λ‹΅ν•œλ‹€. (Response)

🌟 μš”μ²­ 데이터λ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν•œλ‹€λŠ” 뜻일까 ?

μ˜ˆμ‹œ)

  • μŠ€νŽ™ : POST λ©”μ„œλ“œλŠ” λŒ€μƒ λ¦¬μ†ŒμŠ€κ°€ λ¦¬μ†ŒμŠ€μ˜ 고유 ν•œ 의미 체계에 따라 μš”μ²­μ— 포함 된 ν‘œν˜„μ„ μ²˜λ¦¬ν•˜λ„λ‘ μš”μ²­ν•©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄ POSTλŠ” λ‹€μŒκ³Ό 같은 κΈ°λŠ₯에 μ‚¬μš©λ©λ‹ˆλ‹€.

1. HTML 양식에 μž…λ ₯ 된 ν•„λ“œμ™€ 같은 데이터 블둝을 데이터 처리 ν”„λ‘œμ„ΈμŠ€μ— 제곡
(HTML폼에 μž…λ ₯ν•œ μ •λ³΄λ‘œ νšŒμ› κ°€μž…, μ£Όλ¬Έ λ“±μ—μ„œ μ‚¬μš©)
2. κ²Œμ‹œνŒ, λ‰΄μŠ€ κ·Έλ£Ή, 메일링 리슀트, λΈ”λ‘œκ·Έ λ˜λŠ” μœ μ‚¬ν•œ 기사 그룹에 λ©”μ‹œμ§€ κ²Œμ‹œ
(κ²Œμ‹œνŒ κΈ€μ“°κΈ°, λŒ“κΈ€ 달기)
3. μ„œλ²„κ°€ 아직 μ‹λ³„ν•˜μ§€ μ•Šμ€ μƒˆ λ¦¬μ†ŒμŠ€ 생성
(μ‹ κ·œ μ£Όλ¬Έ 생성)
4. κΈ°μ‘΄ μžμ›μ— 데이터λ₯Ό μΆ”κ°€ν•œλ‹€.
(ν•œ λ¬Έμ„œ 끝에 λ‚΄μš© μΆ”κ°€ν•˜κΈ°)

정리 : 이 λ¦¬μ†ŒμŠ€ URI에 POST μš”μ²­μ΄ 였면 μš”μ²­ 데이터λ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν• μ§€ λ¦¬μ†ŒμŠ€λ§ˆλ‹€ λ”°λ‘œ μ •ν•΄μ•Ό ν•œλ‹€.

🌟 POST 정리

1. μƒˆ λ¦¬μ†ŒμŠ€ 생성(등둝)

  • μ„œλ²„κ°€ 아직 μ‹λ³„ν•˜μ§€ μ•Šμ€ μƒˆ λ¦¬μ†ŒμŠ€ 생성

2. μš”μ²­ 데이터 처리

  • λ‹¨μˆœνžˆ 데이터λ₯Ό μƒμ„±ν•˜κ±°λ‚˜, λ³€κ²½ν•˜λŠ” 것을 λ„˜μ–΄μ„œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” 경우
    예) μ£Όλ¬Έμ—μ„œ κ²°μ œμ™„λ£Œ -> λ°°λ‹¬μ‹œμž‘ -> λ°°λ‹¬μ™„λ£Œ 처럼 λ‹¨μˆœνžˆ κ°’ 변경을 λ„˜μ–΄ ν”„λ‘œμ„ΈμŠ€μ˜ μƒνƒœκ°€ λ³€κ²½λ˜λŠ” 경우
  • POST의 결과둜 μƒˆλ‘œμš΄ λ¦¬μ†ŒμŠ€κ°€ μƒμ„±λ˜μ§€ μ•Šμ„ μˆ˜λ„ 있음
    ν…μŠ€νŠΈμ˜ˆ) POST /orders/{orderId}/start-delivery (컨트둀 URI)

3. λ‹€λ₯Έ λ©”μ„œλ“œλ‘œ μ²˜λ¦¬ν•˜κΈ° μ• λ§€ν•œ 경우

예 ) μ‘°νšŒν•  λ•ŒλŠ” μ΅œλŒ€ν•œ GET으둜 ν•˜λŠ”κ²Œ μœ λ¦¬ν•˜λ‹€. ν•˜μ§€λ§Œ, λ³€κ²½λ˜κ±°λ‚˜ ν”„λ‘œμ„ΈμŠ€κ°€ μ§„ν–‰λ˜λŠ” 경우 정말 μ–΄μ©” 수 μ—†λŠ” κ²½μš°μ—λŠ” POSTλ₯Ό μ“°λ©΄ μ’‹λ‹€.

profile
μ•„λŠ‘ν•œ λ‡Œκ³΅κ°„ 🧠
post-custom-banner

0개의 λŒ“κΈ€