인프런 김영한님 [모든 개발자를 위한 HTTP 웹 기본 지식] 강의를 듣고 정리한 내용입니다.😊😊
1. PUT
• 리소스를 대체 (완전히 대체⭐)
- 리소스가 있으면 대체
- 리소스가 없으면 생성
- 쉽게 이야기해서 덮어버림
• 중요! 클라이언트가 리소스를 식별
- 클라이언트가 리소스 위치를 알고 URI 지정
- POST와 차이점
👉 리소스가 있는 경우1
- 클라이언트가 /members/100 리소스를 지정해서 데이터를 서버로 보낸다.
👉 리소스가 있는 경우2
- 서버에 리소스에 대한 데이터가 있는 경우, 리소스를 대체 한다.
👉 리소스가 없는 경우1
- 클라이언트가 /members/100 리소스를 지정해서 데이터를 서버로 보낸다.
- 서버에는 이런 리소스가 없다.
👉 리소스가 없는 경우2
- 서버에서는 신규 리소스를 생성한다.
🚨 주의! - 리소스를 완전히 대체한다1
- 클라이언트에서 /members/100 리소스에서 나이만 변경하여 서버에 데이터를 보낸다.
🚨 주의! - 리소스를 완전히 대체한다2
- username 필드가 삭제되어 리소스가 대체된다.
2. PATCH
• 리소스 부분 변경
• 간혹, HTTP에서 PATCH를 지원이 안되는 서버도 있기 때문에 안될 경우에는 POST를 쓰면 된다.
👉 리소스 부분 변경1
👉 리소스 부분 변경2
3. DELETE
• 리소스 제거
👉 리소스 제거1
- 클라이언트에서 /members/100 리소스를 서버에 보낸다.
👉 리소스 제거2
- 서버에서는 응답받은 리소스를 제거한다.
❓ 질문 정리 ❗
Q. 회원 정보를 수정할 때, PATCH를 사용하면 변경되는 필드가 무엇이냐에 따라 코드를 다 따로 작성해야하기 때문에 중복되는 코드가 많아지므로 PUT으로 전체를 덮어쓰게끔 했다. 만약에 PATCH를 사용한다면, 어떤 식으로 구현해야 좋은 코드를 짤 수 있을까?
A. update 쿼리를 동적 쿼리가 되도록 구성하면 된다.
예를 들어, 클라이언트에서는 변경된 값만 서버에 넘기고, 서버에서는 필드에 값이 있는 경우에는 update set 조건으로 추가하고, 값이 null인 경우에는 update set 조건에서 제외하는 식으로 만들면 된다.
(참고) 동적쿼리란 특정 조건이나 상황에 따라 쿼리가 변경되어야 하는 경우를 말한다.
[출처] https://www.inflearn.com/questions/117477
Q. POST와 PUT 모두 리소스가 없으면 생성할 수 있는데, 이 둘의 차이점은 무엇인가?
A. POST는 리소스의 생성, PUT은 리소스의 대체를 의미한다.
1) POST는 클라이언트가 서버에 요청을 보낼 때마다 새로운 리소스를 생성하고 생성한 리소스의 아이디를 반환한다. 그래서 같은 요청을 반복하면 리소스 아이디가 새롭게 바뀐다.
- 클라이언트가 POST /members 를 요청할 때마다 생성되는 리소스는 /members/1, /members/2 이런식으로 계속 바뀐다.
2) PUT은 처음 리소스가 없다면 새로 생성한 리소스 아이디를 반환하고, 이후에 계속 같은 요청을 보내면 처음 생성했던 리소스의 아이디만 반환합니다. 그래서 같은 요청을 반복해도 같은 리소스 아이디는 같다.
- 클라이언트가 PUT /members/100 을 요청할 때마다 /member/100이 반환된다.
[출처] https://www.inflearn.com/questions/525579
'📚 Computer Science > Network' 카테고리의 다른 글
[모든 개발자를 위한 HTTP 웹 기본 지식] 5. HTTP 메서드 활용 - 클라이언트에서 서버로 데이터 전송 (0) | 2023.08.11 |
---|---|
[모든 개발자를 위한 HTTP 웹 기본 지식] 4. HTTP 메서드 - HTTP 메서드의 속성 (0) | 2023.08.11 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 4. HTTP 메서드 - GET, POST (0) | 2023.08.11 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 4. HTTP 메서드 - HTTP API를 만들어보자 (0) | 2023.08.11 |
[모든 개발자를 위한 HTTP 웹 기본 지식] 3. HTTP 기본 - HTTP 메세지 (0) | 2023.08.11 |