작성
·
319
2
강사님 안녕하세요:)
강의 내용 중 POST 예시에서
"기존 자료에 데이터 추가 ex) 한 문서 끝에 내용 추가하기" 에서 궁금한 점이 생겨 질문드립니다.
위 경우 저는 PATCH 나 PUT을 사용해서 /contents/{id} 이런식으로 기존 내용에 추가해야 할 것이라고 생각했는데, 왜 POST를 사용하는지 궁금합니다.
또한, POST를 사용할 경우 http body에 기존 문서의 id를 넣어서 전송해야 되는 것 맞나요?
그리고 뒤에 HTTP API 설계 예시 강의 "HTTP API -컬렉션 회원관리 시스템" 부분에서 PATCH와 PUT을 사용하기 애매한 경우에는 POST를 사용하여 수정하라고 하셨는데, 어떤 경우가 애매한지 궁금합니다("기존 자료에 데이터 추가"가 그 애매한 경우인가요..?).
쓰다보니 질문이 많아졌네요,,ㅜ
강의를 들으면서 많이 배우고 있습니다. 정말 감사합니다!!
답변 2
5
안녕하세요. 현집님
강의 내용 중 POST 예시에서 "기존 자료에 데이터 추가 ex) 한 문서 끝에 내용 추가하기"
이 부분은 사실 자주 사용하는 예시는 아닙니다. 해당 예시를 자세히 설명드리면 로그파일이 있는데, 그 로그파일 끝에 로그를 추가 하는 것입니다. 예를들어서 다음과 같을 때
GET /logs/a01
로그1줄
로그2줄
로그3줄
이렇게 실행하면
POST /logs/a01
body: 로그 4줄
결과
로그1줄
로그2줄
로그3줄
로그4줄
이런식으로 된다는 예시입니다. 물론 서버에서 POST /logs/{id}로 보내면 해당 리소스에 데이터를 추가합니다. 라고 사전에 개발자가 스펙을 정의해야 합니다. 이 경우 생각하신 것 처럼 PATCH를 사용해도 됩니다. 그런데 PUT은 리소스 전체를 다 보내야 하기 때문에, 적절하지 않습니다.
마지막에 PATCH와 PUT을 사용하기 애매한 경우는 실제 개발을 해보면 상당히 많이 만나게 됩니다.
단순히 해당 리소스만 조금 변경하는게 아니라, 해당 리소스를 변경하는 것 처럼 보이지만, 전체 프로세스의 상태가 변경되는 경우에는 POST를 사용하는게 맞다 생각합니다. 예를 들어서, 단순히 주문의 상태를 대기 -> 배달시작으로 변경하려고 PATCH를 생각했는데, 실제로는 여러 프로세스가 엮여서 돌아가게 되면, 이 경우는 특정 리소스 하나를 변경했다기 보다는 프로세스 자체를 진행한 것이기 때문에, POST를 사용하는게 더 적절하다 생각합니다.
감사합니다.
1