HTTP Method에 대해
HTTP Method란? 클라이언트 - 서버 구조에서 요청(request)와 응답(response)가 이루어지는 방식을 의미합니다.
서버가 수행해야 할 동작을 지정하여 요청(request)을 보내는 방법이라고 정리할 수 있겠네요.
HTTP 메서드는 왜 사용할까요?
결국 리소스와 동작를 분리하기 위함입니다.
HTTP METHOD를 통해 서버가 수행해야 할 동작을 지정하면, URI는 리소스만 식별하면 되기 때문이죠.
HTTP Method의 종류
HTTP Method는 크게 8가지가 있으며, 다음과 같습니다.
- GET : 리소스를 조회
- POST : 데이터 추가, 등록
- PUT : 리소스 대체, 수정 / 해당 리소스가 없으면 새롭게 생성
- DELETE : 리소스 삭제
- PATCH : 리소스 부분 변경(수정)
- HEAD : GET과 동일하나, HTTP 메세지의 body 부분을 제외하고 조회
- OPTIONS : 서버와 브라우저가 통신하기 위한 통신 옵션을 확인하기 위함
- 서버가 어떤 method, header, content-type을 제공하는지 알 수 있습니다.
- CONNECT : 대상 자원으로 식별되는 서버에 대한 연결 요청
이 중 주로 사용하는 메서드는 5가지입니다. (GET, POST, PUT, DELETE) + PATCH
위 5가지 메서드를 좀 더 자세히 들여다볼까요?
GET 메서드
- 리소스를 조회하는 메서드입니다.
- 예를 들어 서버에게 클라이언트가 "이 페이지 보여줘" 라고 요청하는 경우가 있겠네요.
- URL 입력이나, 링크를 클릭하는 경우도 GET 요청에 해당합니다.
- GET 요청은 멱등성 이라는 개념을 지니고 있어, 여러 번 조회 요청을 하여도 리소스는 변하지 않습니다.
- GET 요청에서 서버에 데이터를 전달하는 경우, 쿼리스트링을 통해서 전달합니다.
- 초록창에 "미세먼지" 라고 검색을 하니, URL의 맨 마지막에 query=미세먼지 라는 부분을 확인할 수 있습니다.
- 하지만, 해당 쿼리스트링은 클라이언트에게 전달하는 데이터 정보가 무방비 상태로 노출되므로, 이를 유의해야 합니다. (브라우저 히스토리에도 기록이 남습니다.)
POST 메서드
- 주로 새로운 리소스를 생성(Create)하는데 사용합니다.
- 성공적으로 creation을 완료하면 201 (Created) HTTP 응답을 반환합니다.
- 데이터를 메세지 바디에 쿼리 파라미터 형식으로 전달합니다.
- 쿼리 파라미터는 key - value 형식으로 되어 있습니다.
- 이는 GET 방식과 비교하면, 데이터가 외부로 노출되지 않으므로, 보안상의 이점이 있습니다.
- POST로 조회가 가능하긴 하나, 해당 메서드는 멱등성을 지니지 않으므로, POST 메서드를 여러 번 수행할 경우 같은 결과값이 나오는 것을 보장하지 않습니다. 추가적으로, GET 메서드는 캐싱을 이용하므로, 조회 속도 또한 POST 메서드에 비해서 우수합니다.
- 데이터를 전송할 때, Body에 담아 전송하므로, 메세지 길이의 제한이 없습니다.
- 문자열 데이터 뿐만 아니라, RadioButton같은 객체들의 값도 전송할 수 있습니다.
PUT 메서드
- 리소스를 완전히 대체하는 개념(덮어쓰기)
- 클라이언트가 리소스를 식별할 수 있습니다.
- 클라이언트가 구체적인 리소스 위치를 아는 상태에서, URI를 지정합니다.
- PUT /posts/1: 1번 게시글 수정 요청
- 이는 부분 수정이 불가능합니다. 만약 기존에 A, B 라는 데이터가 존재했는데, C라는 데이터를 담아 PUT 요청을 보낸다면, A, B 모두 삭제되고 C로 대체되는 개념입니다.
- 멱등성을 지닙니다.
PATCH 메서드
- PUT과 같이 리소스를 수정하는 역할을 하지만, 리소스를 부분 변경한다는 점에서 차이가 있습니다.
- 기존 데이터 A, B 가 존재할 때, B = C 로 대체 후 PATCH 요청을 하면 데이터가 A, C로 변경됩니다.
- PATCH 메서드를 지원하지 않는 서버도 있는데, 그럴 경우 POST를 사용합니다.
- 멱등성을 지니지 않습니다.
DELETE 메서드
- 리소스를 제거하는 역할입니다.
- 멱등성을 지닙니다.
출처
'CS > WEB' 카테고리의 다른 글
[WEB] REST API - URI 설계 규칙 (1) | 2023.04.15 |
---|---|
[Web] REST API란? (0) | 2023.04.15 |