코드/dev
form 요청 PATCH , PUT, DELETE는 불가능한 이유
미로처럼
2024. 2. 26. 09:26
728x90
재직중인 회사에서 팡리이 포함된 기능이 있는 엔드포인트를 새로 추가 및 수정을 진행하게 되었다.
이때 수정 시 PUT이나 PATCH를 사용할때 폼 요청이 지원되지 않는 부분을 정리 할겸 작성을 했다.
불가능한 이유는 일단 지원을 하지 않기 떄문인데 지원을 하지 않는 이유에 대해서는 깊게 알아보기는 어려울 것 같다.
통상 작업을 하게되면 조회(GET), 등록(POST), 수정(PUT OR PATCH), 삭제는(DELETE)를 사용하느데 이미지와 같이 엮어서 사용하게될때 등록할떄는 상관 없지만 수정시에는 폼데이터를 사용할 수 없다.
이번에 요청 받은 작업을 진행 할때 폼데이터를 리스트로 받아 처리를하게 되어서 어쩔 수 없이 수정도 Post를 통해서 작업을 했는데 이게 꼭 이렇게만 처리를 해야하는지 에 대해서는 고민이 든다.
구글링 및 참고 블로그 포스팅을 보면 GET / POST 만 가능한 이유는 다음과 같다.
폼 요청이 GET / POST 만 가능한 이유..
/**
하단 내용은 다른 게시글을 참고하여 작성하였다.
HTML5.초안에 나왔던 사안이지만 Ian에 의해 무산되버리고 이는 스레드로 나와 있다.
https://www.w3.org/Bugs/Public/show_bug.cgi?id=10671#c0
이 논쟁이후 추가 드래프트도 나온다
(https://www.w3.org/TR/2015/NOTE-form-http-extensions-20150929/#http-put-form)
Delete는 없어도 되지만, Put의 경우 payload를 통해 헤더를 구성하는 방식을 제안하기 때문이라고 한다.
또한 Form은 서버에 정보를 제출하기 위해 존재하는데 Delete와 Put은 아니다. (Get같은 경우는 URL에 폼 데이터를 추가해 서버로 전달하는방식이다.)
Post 와 Put은 전달해주는 payload를 처리하는 요청 대상 리소스가 주체가 되냐, 아니면 대체가되냐의 차이가 크기때문에 요청대상 주체가 될수 없는 Put은 쓰일수 없다는 이유도 있다 한다.
즉 Get은 form 정보를 줄게 리소르를 줘!!
post는 form정보를 처리해줘!
Delete는 URI는 리소르를 정확하게 식별하고 요청하기 때문에 form을 통해 값을 전달할게 없고 (header로 토큰 등등정도)
Put은 대상 리소르를 대체하는 payload를 보내라는 것인데,
Form의 정의를 보면 The
HTML element represents a document section containing interactive controls for submitting
interactive control 형태의 라는 것이 있다.
즉 뭔가를 요청하기 위해 필요한데이터를 보내는 것인데
이 관점에서 리소스 요청 대상 그 자체가 Put으로 담기에는 의미를 위반한다는 관점이라 한다. (확실히 form자체의 뜻을 보니 이해가 더 간다)
**/
728x90