주요 메서드

메서드

HTTP 메서드에 메서드에 종류와 주요 특징, 사용예시를 정리한다;

주요 메서드

메서드 동작
GET 리소스 조회
POST 요청 데이터 처리, 주로 등록에 사용
PUT 리소스 대체, 해당 리소스가 없으면 생성
PATCH 리소스 부분 변경
DELETE 리소스 삭제

기타 메서드

메서드 동작
HEAD GET 과 동일하지만, 메시지 부분을 제외한, 헤더와 상태 정보만
OPTIONS 대상 리소스에 대한 통신 가능 메서드 정보
CONNECT 대상 자원으로 식별되는 서버에 대한 터널을 설정
TRACE 대상 리소스에 대한 경로를 추적

Methods

메서드에 대한 상세 설명

1. GET

  • 리소스 조회
  • 서버에 저달하고 싶은 데이터 query 를 통해서 전달 (http://expamle.com?name=koo&age=25)
  • 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음. (최신 스펙에서는 막지 않음)

2. POST

body 에 데이터를 넣어서 서버에게 특정 프로세스를 처리하게 하는 메서드, 보통은 신규 리소스를 등록하는 일을 한다.

주요 쓰임

  1. 새 리소스 생성
  2. 요청 데이터 처리(프로세스)
    • 배달 시작 같은 프로세스의 시작 같은 의미에서도
    • post 결과로 새로운 리소스가 생성되지 않을 수 도 있음.
    • 컨트롤 URI (POST /orders/(orderId)/start-delevery) 실무에서는 리소스 가지고만 URI 를 설계하기는 불가하기 때문에 컨트롤 url 를 만들기도 함.
  3. 다른 메서드로 처리하기 애매한 경우
    • JSON 으로 조회 데이터를 넘겨야 하는데, GET 메서드를 사용하기 어려운 경우
    • POST 에 바디 넣어서 보냄

하지만, 조회 데이터는 되도록이면 GET 을 쓰는게 낳음. 캐싱 하는등의 작업을 할 수 있기 때문에

3. PUT

리소스를 대체

  • 리소스가 있으면 완전히 대체
  • 리소스가 없으면 생성
  • 쉽게 이야기해서 덮어버림.

중요! 클라이언트가 리소스 전체를 알아서 식별함

post 는 리소스를 전체를 몰라도 생성하거나 프로스를 처리할 수 있음.

  • ex) post /members

put 은 리소스 전체를 식별해야 함.

  • ex ) put /members/100

4. PATCH

리소스 부분 변경

POST 도 똑같은 작업을 할 수 있다. 만약 PATCH 가 지원 안되는 서버에 경우 POST 를 사용해서 처리하면 된다.

5. DELETE

리소스를 제거한다.


HTTP 메서드 속성

  • 안전(Safe Methods)
  • 멱등(Idempotent Methods)
  • 캐시 가능(Cacheable Methods)

안전(Safe Methods)

호출해도 리소스를 변경하지 않는 메서드를 안전한 메서드라고 한다.

Ex) → GET, HEAD

멱등(Idempotent)

여러번 호출해도 항상 결과가 같은 메서드를 멱등하다고 한다.

  • GET: 여러번 조호하든 결과가 같다.
  • PUT: 결과를 대체하기 때문에 최종 결과는 같다. 덮어씌기 때문에
  • DELETE: 결과를 삭제한다. 여려번 해도 결과는 같다.
  • POST: 멱등이 아니다! 두번 호출하면 같은 결과가 두면 발생함.

활용

  • 자동 복구 매커니즘
  • 서버가 TIMEOUT 등으로 정상 응답을 못주었을때, 클라이언트가 같은 요청을 다시 해도 되는가? 에 판단 근거가 됨.

Q ) 만약 재요청 중간에 다른 곳에서 리소스를 변경해 버리면?

  • 멱등은 외부 요인으로 중간에 리소스가 변경되는 것 까지는 고려하지 않는다.

캐시 가능 (Cacheable)

  • 응답 결과 리소스를 캐시해서 사용해도 되는가?
  • GET, HEAD, POST, PATCH 캐시 가능
  • 실제로는 GET, HEAD 정도만 캐시로 사용 (키가 같아야 하는데)
    • POST, PATCH 는 본문 내용까지 캐시 키로 고려해야 하는데 구현이 쉽지 않음.