[리팩토링] 4일차

sua_ahn·2023년 6월 5일
0

리팩토링

목록 보기
4/6

REST API에서 @PostMapping("/updatepwd") 처럼 리소스 부분 수정의 경우 어떻게 통신해야 할까?

PUT 메서드

HTTP PUT 메서드의 RFC 문서상 정의에 따르면,
PUT 메서드는 요청 시에 담아 보내는 데이터(message payload)를 이용해서, 새로운 리소스를 생성(create)하거나 이미 존재할 경우 대체(replace) 하라는 명령이다. 다시 말해, HTTP 명령 대상 URI 의 Resource 부분을 업데이트 할때 사용하는 메서드가 아니다.

또한, PUT 메소드는 'safe 하지는 않지만 idempotent' 하다. 반면에 PATCH와 POST 메소드는 'safe 하지 않고 idempotent 하지도 않는 메서드'이다.

  • HTTP 메서드는 서버의 상태를 변경하지 않을 때 "안전"하다고 한다.
  • 반복해서 호출할 때 동일한 결과의 형식을 생성하는 작업을 "멱등적"이다고 한다.

PUT, PATCH, POST 메소드 모두 값을 변경하므로 "안전"하지 않다. PUT 메소드는 여러번 호출해도 같은 데이터로 대체하므로 멱등하나, PATCH와 POST 메소드는 호출 때마다 데이터가 바뀔 수 있어 멱등하지 않다.

리소스 수정을 상점에서의 결제에 비유할 수 있다. 고객의 요청에 의해 점원이 같은 금액으로 여러 번 결제했을 때 한 번만 결제되면 안된다.

PATCH 메서드

HTTP PATCH requests are to make a partial update on a resource.
PATCH 메소드는 리소스를 부분 수정할 때 사용하는 메소드이다.

그러나 PATCH의 문제는 'Support for PATCH in browsers, servers, and web application frameworks is not universal. IE8, PHP, Tomcat, Django, and lots of other software have missing or broken support for it.' 지원이 안되는 곳이 있다...

결론

비밀번호 재설정 api POST members/reset-password
마이페이지 비밀번호 수정 api POST mypage/:member_id/password

REST 스타일 지키기 어렵다ㅜㅜ

참고사이트
https://restfulapi.net/http-methods/
https://stackoverflow.com/questions/48086507/how-to-handle-updates-in-a-rest-api
https://stackoverflow.com/questions/3077229/restful-password-reset
https://repo.yona.io/doortts/blog/issue/12

profile
해보자구

0개의 댓글