👩💻 HTTP 메서드
📌 HTTP API를 만들어보자
✏️API URI 고민
:URI(Uniform Resource Identifier
- 리소스의 의미는 무엇일까 ?
- 회원을 등록하고 수정하고 조회하는것이 리소스가 아님
- ex) 미네랄을 캐라 -> 미네랄이 리소스
- 회원이라는 개념 자체가 바로 리소스이다.
- 리소스를 어떻게 식별할까
- 회원을 등록, 수정, 조회하는 것을 모두 배제
- 회원이라는 리소스만 식별하면 된다. -> 회원 리소스를 URI에 매핑
✏️리소스와 행위를 분리
:가장 중요한 것은 리소스를 식별하는 것
- URI는 리소스만 식별 !
- 리소스와 해당 리소스를 대상으로 하는 행위를 분리
- 리소스: 회원
- 행위: 조회, 등록, 삭제, 변경
- 리소스는 명사, 행위는 동사 (미네랄 = 명사 , 캐라 = 동사)
📌 HTTP 메서드
✏️HTTP 메서드란?
"HTTP 메서드"란, 클라이언트가 서버에 뭔가 요청을 할 때 기대하는 행동이다.
예를 들어서 GET이라는 것은 뭔가 달라는 것이고, POST는 데이터를 줄테니 처리를 하라는 것이다.
"HTTP 메서드 종류"
- 주요 메서드
- GET: 리소스 조회
- POST: 요청 데이터 처리, 주로 등록에 사용
- PUT: 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH: 리소스 부분 변경
- DELETE: 리소스 삭제
- 기타 메서드
- HEAD: get과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 변환
- OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 설명 (참고만)
- CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정 (거의 사용 안함)
✏️주요 메서드
:GET, POST, PUT, PATCH, DELETE
1. GET
"GET"은 이름 그대로 리소스(회원)를 주는 것 이다.
서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
메시지 바디를 사용해서 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장 X
(Ex)회원을 조회하는 등의 역할 수행
2. POST
"POST"는 클라이언트에서 서버로 요청을 보낼 때 서버에게 데이터를 주고 요청 데이터를 처리해달라고 하는 것이다.
메세지 바디를 통해 서버로 요청 데이터를 전달한다.
서버는 요청 데이터를 처리하며 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다.
(Ex)전달된 데이터로 신규 리소스 등록, 프로세스 처리에 주로 사용한다
3. PUT
"PUT"은 리소스를 대체하는 것 이다.
리소스가 있으면 대체하고(덮어씌움), 리소스가 없으면 생성한다.
중요!
클라이언트가 리소스를 식별한다.
클라이언트가 리소스 위치를 알고 URI를 지정(이것이 POST와 차이점)
"리소스가 있는 경우"
"리소스가 없는 경우"
주의 ! - 리소스를 완전히 대체 한다.
4. PATCH
"PATCH"는 리소스를 부분 대체 하는 메서드 이다.
아래의 예제를 함께 확인하자.
5. DELETE
"DELETE"는 리소스를 제거 하는 메서드 이다.
아래의 예제를 함께 확인하자.
📌 HTTP 메서드의 속성
✏️HTTP 메서드 속성에 대해 알아보자
- "안전(Safe)": 호출해도 리소스를 변경하지 않는다
- GET은 단순히 조회만 하기에 안전하지만, POST,DELETE,PUT,PATCH는 안전하지 않는다(변경이 일어남)
- "멱등(Idempotent)": 한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다.
- 자동 복구 메커니즘
- : 서버가 TIMEOUT등으로 정상 응답을 못주었을 때, 클라이언트가 같은 요청을 다시 해도 되는가? (판단 근거)
- GET:한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다
- PUT: 결과를 대체한다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다.
- 내가 요청한다면 결과가 항상 똑같다.
- DELETE: 결과를 삭제한다. 같은 요청을 여러번 해도 삭제된 결과는 똑같다.
- 리소스를 삭제한뒤, 또 리소스를 삭제한다면 최종적으로 리소스는 삭제되어있는 상태
- POST: 멱등이 아니다! 두 번 호출하면 장애가 발생할 수 있다.
- 캐시가능(Cacheable)
- :웹 브라우저에 이미지 되게 큰 걸 한 번 요청했다면, 그 다음에 또 똑같은 리소스를 요청할 필요가 없다. 이미 요청한 리소스를 내 로컬 PC에 저장해두는 것을 캐시라고 한다.
- 응답 결과 리소스를 캐시해서 사용해도 되는가?
- GET, HEAD, POST, PATCH 캐시 가능
- 실제로는 GET, HEAD 정도만 캐시로 사용
'CS > HTTP' 카테고리의 다른 글
[HTTP] 모든 개발자를 위한 HTTP 웹 기본 지식 - 6 (0) | 2024.01.03 |
---|---|
[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 5 (0) | 2024.01.03 |
[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 3 (0) | 2023.12.26 |
[HTTP] 모든 개발자를 위한 HTTP 웹 기본 지식 - 2 (0) | 2023.11.27 |
[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 1 (0) | 2023.11.27 |