HTTP 메서드
HTTP API
API URI
- URI (Uniform Resource Identifier)
- 웹 리소스를 식별하는 데 사용되는 고유한 문자열이다.
- 예시
- 회원 목록 조회, 회원 조회, 회원 등록, 회원 수정, 회원 삭제
리소스와 메서드의 관계
- 리소스 (Resource)
- 데이터를 나타내는 명사이다.
- 위 예시에서 회원이 리소스가 된다
- 메서드 (Method)
- 리소스를 다루기 위한 행동을 나타낸다.
- 위 예시에서 조회, 등록, 수정, 삭제가 HTTP 메서드로 표현된다.
HTTP 메서드
HTTP 메서드는 클라이언트와 서버 간의 상호작용 방식을 정의하는 데 사용된다. 각 메서드는 특정한 목적을 가지고 있다.
GET
- 기본 기능
- 리소스를 조회하고, 그 결과를 클라이언트에게 반환한다.
- 서버의 상태를 변경하지 않는다.
- 메시지 바디 사용
- 일반적으로 메시지 바디를 사용하지 않는다.
- 일부 서버는 허용할 수 있지만, 표준적이지 않기 때문에 권장되지 않는다.
- 필요시 쿼리 파라미터로 전달하는 것이 일반적이다.
- 사용 예시
GET /members?name=John
POST
- 기본 기능
- 클라이언트가 전달한 데이터를 서버에서 처리하고, 처리된 결과를 반환하거나, 새로운 리소스를 생성한다.
- 메시지 바디를 통해 데이터가 서버로 전달된다.
- 사용 예시
- 리소스 생성 여부
- 반드시 새로운 리소스를 생성하지 않을 수도 있다.
- 예를 들어, 특정 프로세스를 시작하는 요청이나, 상태 변경을 처리하는 경우
- 정리
- 데이터를 수정하는 것 뿐만 아니라 다른 메서드로 처리하기 어려운 부분에서 사용될 수 있다.
PUT
- 기본 기능
- 클라이언트가 지정한 리소스를 서버에서 완전히 대체한다
- 만약 지정된 리소스가 존재하지 않으면, 서버가 새로운 리소스를 생성한다.
- 사용 예시
- 클라이언트가 리소스를 식별
PATCH
- 기본 기능
- 리소스의 일부를 수정하는 데 사용된다.
- PUT과 마찬가지로 클라이언트가 리소스의 위치를 알고 있다.
- PUT과 달리, 특정 필드 또는 속성만 변경한다.
- 사용 예시
- 유연성
- 부분 업데이트를 하기 때문에, 불필요한 수정을 줄이고, 효율성을 높인다.
DELETE
- 기본 기능
- 지정된 리소스를 삭제한다.
- PUT과, PATCH와 마찬가지로 클라이언트가 리소스의 위치를 알고 있다.
- 사용 예시
-
특정 회원 삭제
DELETE /members/123
- 안전성 및 고려사항
- DELETE 요청은 되돌릴 수 없으므로, 중요한 데이터를 삭제하는 경우 추가적인 확인 절차를 두는 것이 좋다.
HTTP 메서드의 속성
HTTP 메서드는 다음과 같은 속성들이 존재한다.
- 안전(Safe Methods)
- 멱등(Idempotent Methods)
- 캐시가능(Cacheable Methods)
안전
- 정의
- 안전한 메서드는 리소스를 변경하지 않는 메서드를 의미한다.
- 서버의 상태를 변화시키기 않는다. 따라서 메서드를 여러 번 호출하더라도, 서버에 부정적인 영향을 미치지 않는다.
- 예시
- GET 메서드는 리소스를 조회할 뿐, 리소스를 변경하지 않는다.
- 주의사항
- 안전성은 리소스의 상태 변화에 한정한다
- GET 요청을 한번에 엄청나게 보낸다고 가정해보자, 서버에 과부하를 줄 수 있지만, 이러한 상황은 안전성의 정의에 포함되지 않는다.
멱등
- 정의
- 동일한 요청을 여러 번 수행하더라도 결과가 동일하게 유지되는 속성을 의미한다.
- 요청이 중복될 가능성이 있을 때 안정적인 처리를 보장해준다.
- 멱등성 메서드
- GET
- 한 번 조회하든, 두 번 조회하든 동일한 리소스가 반환된다.
- PUT
- 리소스를 대체하기 때문에, 최종 결과는 항상 동일하다.
- DELETE
- 리소스를 삭제하기 때문에, 최종 결과는 항상 동일하다.
- 비역등성 메서드
- POST
- 동일한 요청을 두 번 보내면, 각각의 결과가 달라질 수 있다.
- 예를 들어, 결제 요청을 두 번 보내면 두 번 결제가 될 수 있다.
- 주의 사항
- 요청 사이에 외부 요인으로 리소스가 변경되었을 경우에 발생하는 문제는 멱등성의 범위에 포함하지 않는다.
캐시가능
- 정의
- 응답 결과를 클라이언트나 중간 캐시 서버에 저장해 두고, 다음 요청 시에 이를 재사용할 수 있는 속성을 의미한다.
- 실제 고려 사항
- 캐시 가능한 메서드
- GET, POST, PATCH, HEAD 등이 있다.
- 실제 사용
- GET, HEAD가 주로 사용되고, POST와 PATCH의 경우 메시지 바디의 복잡성 때문에 실무에서 캐시되는 경우가 드물다.
기타 메서드
HEAD
- 기본 기능
- 응답의 헤더 부분만 가져오는 메서드다.
- 본문은 제외된다
- 사용 예시
- 파일 크기 확인
- 예를 들어, 영화를 다운로드하고 싶을 때, 파일이 너무 크다면 다운로드를 거절할 수 있게 하기 위해 사용한다. 이 경우
Content-Length
와 같은 헤더 정보를 가져와 파일 크기를 확인하고, 실제로 다운로드할지 결정하는 데 도움이 된다.
Reference
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC?srsltid=AfmBOooNtv7KIam6DI3gAnWZNNj8S2dgbot6grksRKUJWGQ4Eb0WNi1W