GET
- 리소스를 조회할 때 사용한다.
- 쿼리를 통해 데이터를 전달한다. (브라우저에 따라 길이 제한이 있다.)
- 캐시 사용이 가능하다. -> 똑같은 메소드를 다시 호출했을 때, 캐시가 다시 로드하여 보여준다.
- 호출 url이 모두 노출되므로 보안 취약하다.
- ex) http://{Base URL}?id=123&fruit=사과
POST
- 리소스를 새로 등록할 때 사용한다.
- 메시지 바디를 통해 데이터를 전달한다. (길이 제한이 없다.)
- 데이터를 파라미터로 전달하진 않지만 메시지 바디도 다 볼 수 있기 때문에 암호화하지 않으면 보안에 취약하다.
PUT
- 리소스를 수정할 때 사용한다.
- POST와 다르게 리소스의 위치를 알고 URI를 지정해 주어야 한다.
- 지정한 URI에 리소스가 존재하지 않는다면 새로 생성하고, 존재한다면 덮어쓰기한다.
- 리소스 전체를 수정하므로, 모든 필드를 지정해 주어야 한다.
PATCH
- 리소스를 수정할 때 사용한다.
- PUT과 다르게 리소스를 부분 수정할 때 사용한다. 따라서 수정할 필드만 지정해도 된다.
POST와 PUT의 차이
POST는 지정한 URI 아래에 새로운 리소스를 생성하지만, PUT은 리소스의 위치를 알고 URI로 지정해 주어야 한다.
POST의 경우, /fruits 라고 요청하면 fruits 아래에 새로운 리소스를 생성한다.
PUT의 경우, /fruits/15 라고 요청하면 15번 데이터를 수정하거나 존재하지 않는다면 새로 생성한다.
PUT과 PATCH의 차이
"fruit"과 "price"를 필드로 갖는 엔티티가 있다고 하자. 그 중 하나의 데이터가 다음과 같다.
"name" : "apple" "price" : 1500 |
이 데이터를 수정하려고 할 때, PUT으로 요청하는 경우, 모든 필드의 값을 지정하지 않으면, 기존의 데이터가 날라가는 무서운 상황이 일어날 수 있다.
요청 | 결과 |
"price" : 2000 | "name" : null "price" : 2000 |
따라서, PUT으로 요청하려면 다음과 같이 해야 한다.
요청 | 결과 |
"name" : "apple" "price" : 2000 |
"name" : "apple" "price" : 2000 |
이렇게 일부 필드만 수정하고 싶은 경우, 사용하기 적절한 메소드는 PATCH이다.
요청 | 결과 |
"price" : 2000 | "name" : "apple" "price" : 2000 |
'CS Study > 네트워크' 카테고리의 다른 글
웹 동작 방식 (0) | 2022.04.19 |
---|---|
쿠키, 세션, 캐시 (0) | 2022.04.15 |
CORS란 + 스프링부트에서 CORS 에러 해결하기 (0) | 2022.04.06 |
HTTP와 HTTPS의 차이 (0) | 2022.03.23 |
OSI 7계층 (0) | 2022.03.07 |