HTTP 주요 메서드
- GET : 리소스 조회
- POST : 요청 데이터 처리, 주로 등록에 사용
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH : 리소스 부분 변경
- DELETE : 리소스 삭제
HTTP 기타 메서드
- HEAD : GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환
- OPTIONS : 대상 리소스에 대한 통신 가능 옵션(메서드)을 설명(주로 CORS에서 사용)
- CONNECT : 대상 리소스로 식별되는 서버에 대한 터널을 설정
- TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행
GET
- 리소스 조회
- 서버에 전달하고 싶은 데이터는 쿼리파라미터를 똥해서 전달
- 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음
POST
- 요청 데이터 처리
- 메시지 바디를 통해 서버로 요청 데이터 전달
- 서버는 요청 데이터를 처라 > 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
- 주로 전달된 데이터로 신규 리소스 등록, 프로제스 처리에 사용
POST 사용 예시
- 새 리소스 생성
- 요청 데이터 처리
- 다른 메서드로 처리하기 어려운 경우 ex) GET메서드에 JSON 메시지를 담아 조회를 해야 하는데, GET을 사용하기 어려운 경우
PUT
- 리소스가 있는 경우, 리소스를 대체
- 리소스가 없는 경우, 리소스를 생성
POST와 차이점
post/order
{
"name":"PC",
"price": "500"
}
post/order
{
"name":"PC",
"price": "500"
}
HttpResponse 200 OK
{
"id":1,
"name":"PC",
"price": "500"
}
HttpResponse 200 OK
{
"id":2,
"name":"PC",
"price": "500"
}
POST의 경우 같은 리소스를 다수의 요청을 하게 되어도 응답 리소스의 고유값이 달라지면서 새로운 리소스를 생성해줍니다.
put/order/1
{
"name":"PC",
"price": "500"
}
put/order/1
{
"name":"PC",
"price": "1000"
}
HttpResponse 200 OK
{
"id":1,
"name":"PC",
"price": "1000"
}
PUT의 경우 같은 리소스를 여러 번 요청하여도 처음 생성된 리소스만 있을 뿐 새로운 리소스를 생성하지 않습니다.
단, 마지막 요청에서 price의 값이 1000으로 요청을 하기 때문에 응답 리소스에서 price의 값은 1000이 됩니다.
만약
put/order/1
{
"price": "1000"
}
HttpResponse 200 OK
{
"id":1,
"price": "1000"
}
PUT 요청에서 "name" 이 없고 "price"가진 상태에서 요청을 하게 되면 응답 리소스에는 "name"이 없어지고 "price"만 남게 됩니다.
결국 PUT 리소스를 완전히 대체한다고 생각하시면 됩니다.
PATCH
- 리소스 부분 변경
- PUT 과 같은 기능을 하지만 미세하게 다르다
PUT과 차이점
//기존 메시지 바디
{
"name":"PC",
"price": "500"
}
patch/order/1
{
"price": "1000"
}
HttpResponse 200 OK
{
"id":1,
"name":"PC",
"price": "1000"
}
PUT 과 다르게 리소스를 아예 덮어씌우지 않고 요청한 리소스의 값만 대체를 한다.