기존에 POST와 PUT의 차이라고 알고 있던 지식
- POST : Create
- PUT : Update
이번에 조금 더 자세하게 알게 되었다.
POST : 클라이언트는 등록될 리소스의 URI를 모른다. (서버가 결정)
PUT : 클라이언트가 직접 리소스의 URI를 지정한다.
예를 들어 이해하는 게 가장 빠르다.
유저 스키마가 다음과 같다고 정의해보자.
- id: Int (순차적으로 하나씩 증가되며 저장됨)
- name: String
/members : 유저를 생성하는 URI (POST)
- 클라이언트는 어떤 유저가 생성될지 모른다. (어떤 아이디를 갖게 될지 모름, 서버가 리소스 URI 결정)
- 등록될 리소스의 URI를 모름
/members/{id} : 유저의 이름을 수정하는 URI (PUT)
- 클라이언트가 실제로 어떤 유저인지 알고 있음
- 클라이언트가 리소스의 URI를 알고 관리
적절한 예시인지 모르겠으나 느낌은 이렇다!
HTTP Method를 통해 모두 해결되면 좋겠지만, 실제 경험도 그렇고 딱 맞아떨어지지 않는 경우가 많다.
그럴 때 나는 /members/delete/{id}와 같이 썼지만, /member/{id}/delete와 같이 리소스 명시를 해치지 않으면서
컨트롤 URI를 써야겠다고 느꼈다.
추가적으로 DB의 수정이 일어나면 무조건 PUT을 사용했는데 좋은 방법이 아니었다.
- PUT : 기존의 데이터를 모두 덮어 씌움
- PATCH : 부분적으로 데이터를 수정
앞으로 PATCH도 활용해 보아야겠다.
Reference