개발일기

HTTP 메서드 - PUT, PATCH, DELETE 본문

Spring/(김영한님)HTTP웹 기본 지식

HTTP 메서드 - PUT, PATCH, DELETE

한둥둥 2023. 3. 10. 10:46

PUT 

  • 리소스를 대체
    • 리소스가 있으면 대체 (완전하게 대체함) 
    • 리소스가 없으면 생성
    • 쉽게 이야기해서 덮어버림
  • 중요! 클라이언트가 리소스를 식별
    • 클라이언트가 리소스 위치를 알고 URI 지정
    • POST와 차이점 

폴더의 파일을 복사하는 원리와 똑같다보면 됨. 폴더에 파일이 없으면 넣어주고 폴더에 파일이 있으면 지우고 덮어씌우는 원리 

 

PUT 리소스가 있는 경우1

=======================================

PUT /members/100 HTTP/1.1 

Content-Type: application/json

{

     "username" : "hello",

     "age" : 50

}

=========================================

클라이언트가 구체적인 전체적인 위치 경로를 알고 URL을 지정하는 것이다. 

이것이 바로 포스트와의 큰 차이점 

POST의 경우 클라이언트는 100번에 만들지 200번에 만들지 잘 모름 

하지만 PUT의 경우는 정확히 100을 보내고있음. 

 

PUT을 요청메시지를 보내면 

============================

/members/100

{

   "username" : "young",

   "age" : 20

}

=============================

이렇게 있으면 리소스가 메시지를 받으면 

=============================================

/members/100

{

    "username" : "old",

    "age" : 50

}

==============================================

 

 

PUT리소스가 없는 경우 

그냥 그대로 들어가서 신규리소스가 생성이 된다. 

 

PUT 주의! - 리소스를 완전히 대체한다 

===============================

PUT /members/100 HTTP/1.1

Content-Type: application/json

{

    "age" : 50

}

================================

요청을 보면 유저이름을 빼고 나이만 대체하고 싶어서 나이 데이터만 보내는 경우이다. 

기존의 데이터는 

=========================================

/members/100

{

   "username" :"young",

   "age" : 50

}

===========================================

 

서버에서 요청을 받으면 리소스가 

=============================================

/members/100

{

   "age" : 50,

}

=============================================

username 필드가 삭제되어져 버린다. 

완전히 대체 되어버려서 기존의 것이 삭제되어버리는 것이다. 

이렇게 되면 리소스를 수정하는게 어려움 

PUT은 리소스를 갈아치우는 용도로만 사용함. 

 

PATCH 

리소스 부분 변경1

=================================

PATCH /members/100 HTTP/1.1 

Content-Type: application/json

{

   "age" : 50

}

=================================

이 요청 메시지를 서버로 보내면 

 

리소스 부분 변경 

/members/100

===================================

{

      "username" : "young",

      "age" : 50

}

====================================

age만 50으로 변경 

 

부분적으로 리소스 데이터 바꾸싶으면 PATCH사용 

간혹 HTTP에서 PATCH를 못받아들이는 경우가 있는데 이때는, POST를 사용하자. 

DELETE 

- 리소스 제거 

=====================================

DELETE /members/100 HTTP/1.1

Host: localhost:8080

=====================================