반응형

이번시간에는 HTTP 메서드 중에 PUT, PATCH, DELETE에 대해서 알아보도록 하겠다.

PUT은 리소스를 대체해버리는 것이다.

폴더에 파일을 복사하는 것과 비슷하다고 생각하면 된다.
만약에 폴더에 그 파일이 없으면, 파일이 새로생긴다. 그런데, 기존에 똑같은 파일이 있으면, 기존파일을 덮어써버린다.

PUT도 마찬가지다.

예를 들어서 내가 PUT으로 /members/100이라고 보낸다고 가정하자.

그러면, /members/100 이라는 리소스가 없으면 이게 신규로 생성된다.

만약에 /members/100 리소스가 기존것이 있으면 기존것을 날려버리고 이것이 덮어써진다. 완전히 대체한다.

 

POST와 PUT의 차이점

POST는 /members로 요청하면 서버가 URI를 지정했는데, PUT은 클라이언트가 리소스의 URI를 알고 있는 것이다.

 

PUT은 리소스를 대체,

중요한 것은, POST와 조금 다른점이 있는데, PUT은 클라이언트가 리소스의 위치를 알고 URI를 지정한다.

 

 

만약에 내가 PUT으로 /members/100에 리소스를 넣을거라고 요청했는데,
서버에 /members/100에 리소스가 있는 경우,

/members/100에 있었던 리소스가 내가 요청한 리소스로 대체가 된다.

만약에 /members/100에 리소스가 없으면,

신규 리소스가 members/100에 생성된다.

PUT을 사용할 때, 주의할 점이 있다.

/members/100에 있는 리소스에 대해서 나이만 50으로 수정하고 싶어서
'age':50 만 리소스로 요청했다.

기존에 /members/100 에 있던 "username":"young", "age":20 은 어떻게 될까?
나이만 바뀔까?

PUT은 리소스를 완전히 대체하기 때문에 "age":50으로 /members/100 리소스가 대체되고
username필드는 삭제된다!!

어? 그러면 PUT으로는 리소스를 수정하기는 어려운데.. 좋은 방법이 없을까?

 

 

PATCH를 사용하면 된다.

리소스를 부분변경할 수 있다.

PATCH로 "age:50"만 보내면,

/members/100 리소스의 age만 50으로 변경된다.

어떤 리소스를 부분변경하고 싶을 때는 PATCH를 사용하면 된다.

좀 오래된 서버들같은 경우에는 PATCH를 지원하지 않는 서버들도 있을 수 있는데,
그럴 때는 POST를 사용하면 된다. POST는 무적인가..? ㅋㅋ

리소스를 제거할 때는 DELETE를 사용하면 된다.

DELETE로 /members/100 지울거라고 보내면,

/members/100 리소스가 지워진다.

 

반응형