1. 대표적인 4가지
2. 종류 8가지
- GET: 서버의 자원을 클라이언트로 가져오고싶을 때
- POST: 서버에 새롭게 자원을 추가, 작성
- PUT: 서버의 데이터를 갱신, 작성
- DELETE: 서버의 데이터를 삭제
- HEAD: 서버 리소스의 헤더 (메타 데이터의 취득)
- OPTIONS: 리소스가 지원하고 있는 메소드이 취득
- PATCH: 리소스의 일부분을 수정
- CONNECT: 프록시 동작의 터널 접속을 변경
참고
멱등성(Idempotence)이란?
여러번 수행해도 결과가 같음을 의미한다. 즉, 호출로 인하여 데이터가 변형이 되지 않는다는 것을 의미한다.
1) GET
정의
- GET 메소드는 주로 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드
- 만약에 GET요청이 성공적으로 이루어진다면 XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴한다.
- 에러가 발생하면 주로 404 (Not found) 에러나 400 (Bad request) 에러가 발생한다.
- HTTP 명세에 의하면 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다.
- GET 요청은 idempotent 하다.
- 같은 요청을 여러 번 하더라도 변함없이 항상 같은 응답을 받을 수 있다.
- 데이터를 변경하는 연산에 사용하면 안된다.
예시
GET /user/1
- 데이터를 조회하는 것이기 때문에 요청시에 Body 값과 Content-Type 가 비워져있다. 조회할 데이터에 대한 정보는 URL을 통해서 파라미터를 받고 있는 모습을 볼 수 있다.
- 데이터 조회에 성공한다면 Body 값에 데이터 값을 저장하여 성공 응답을 보낸다.
- GET은 캐싱이 가능하여 같은 데이터를 한번 더 조회할 경우에 저장한 값을 사용하여 조회 속도가 빨라진다.
2) POST
정의
- POST 메소드는 주로 새로운 리소스를 생성(create)할 때 사용
- 조금 더 구체적으로 POST는 하위 리소스(부모 리소스의 하위 리소스)들을 생성하는데 사용된다.
- 성공적으로 creation을 완료하면 201 (Created) HTTP 응답을 반환한다.
- POST 요청은 idempotent 하지 않다.
- 같은 POST 요청을 반복해서 했을 때 항상 같은 결과물이 나오는 것을 보장하지 않는다
- 두 개의 같은 POST 요청을 보내면 같은 정보를 담은 두 개의 다른 resource를 반환할 가능성이 높다.
예시
POST /user
body: { data : "example" }
Content-Type: "application/json"
- 데이터를 생성하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다. 해당 예시는 JSON을 통해서 작성된 예시
- URL을 통해서 데이터를 받지 않고, Body 값을 통해서 받는다.
- 데이터 조회에 성공한다면 Body 값에 저장한 데이터 값을 저장하여 성공 응답을 보낸다.
3) PUT
정의
- PUT은 리소스를 생성 / 업데이트하기 위해 서버로 데이터를 보내는 데 사용
- PUT 요청은 idempotent 합니다.
- 동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과가 생성됩니다.
예시
PUT /user/1
body: { data : "update example" }
Content-Type: "application/json"
- 데이터를 수정하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다. 해당 예시는 JSON을 통해서 작성된 예시
- URL을 통해서 어떠한 데이터를 수정할지 파라미터를 받는다. 그리고 수정할 데이터 값을 Body 값을 통해서 받는다.
- 데이터 조회에 성공한다면 Body 값에 저장한 데이터 값을 저장하여 성공 응답을 보낸다.
3) DELETE
정의
- DELETE 메서드는 지정된 리소스를 삭제합니다.
예시
DELETE /user/1
- 데이터를 삭제하는 것이기 때문에 요청시에 Body 값과 Content-Type 값이 비워져있다.
- URL을 통해서 어떠한 데이터를 삭제할지 파라미터를 받는다.
- 데이터 삭제에 성공한다면 Body 값 없이 성공 응답만 보내게 된다.
👩🏻💻 자주하는 질문
- POST방식이 GET방식보다 보안측면에서 더 좋다?
GET과 비교하여 URL에 데이터의 정보가 들어 있지 않으므로 조금 더 안전하다고 볼 수 있다.
- GET방식이 POST방식보다 속도가 빠르다?
GET 방식은 캐싱을 하기 때문에 여러번 요청시 저장된 데이터를 활용하므로 조금 더 빠를 수 있다.
- POST vs PUT
POST와 PUT은 구분해서 사용해야한다. POST는 새로운 데이터를 계속 생성하기 때문에 요청시마다 데이터를 생성하지만, PUT은 사용자가 데이터를 지정하고 수정하는 것이기 때문에 같은 요청을 계속하더라도 데이터가 계속 생성되지는 않는다.
- PUT vs PATCH
- 정보를 수정할 수 있는 HTTP Method는 PUT, PATCH
- PUT은 지정한 데이터를 전부 수정하는 Method이지만 PATCH는 정보의 일부분이 변경되는 방법입니다. 그래서 PUT은 멱등하지만, PATCH는 멱등하다고 볼 수 없습니다.
- PUT: 자원의 전체 교체, 자원 교체 시 모든 필드 필요 ( 만약 전체가 아닌 일부만 전달할 경우, 전달한 필드 외 모두 null 또는 초기값 처리됨
- PATCH: 자원의 부분 교체, 자원 교체 시 일부 필드 필요

https://velog.io/@yh20studio/CS-Http-Method-%EB%9E%80-GET-POST-PUT-DELETE
https://papababo.tistory.com/entry/HTTP-METHOD-PUT-vs-PATCH-%EC%B0%A8%EC%9D%B4%EC%A0%90