주요 메서드
메서드
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 에 데이터를 넣어서 서버에게 특정 프로세스를 처리하게 하는 메서드, 보통은 신규 리소스를 등록하는 일을 한다.
주요 쓰임
- 새 리소스 생성
- 요청 데이터 처리(프로세스)
- 배달 시작 같은 프로세스의 시작 같은 의미에서도
- post 결과로 새로운 리소스가 생성되지 않을 수 도 있음.
- 컨트롤 URI (POST /orders/(orderId)/start-delevery) 실무에서는 리소스 가지고만 URI 를 설계하기는 불가하기 때문에 컨트롤 url 를 만들기도 함.
- 다른 메서드로 처리하기 애매한 경우
- 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 는 본문 내용까지 캐시 키로 고려해야 하는데 구현이 쉽지 않음.