A ship in harbor is safe, but that is not what ships are built for.

STUDY/Network

Ch03. HTTP 메서드

플리피나리 2024. 12. 6. 21:38
반응형

1. HTTP API

URI = Uniform Resource Identifier → 가장 중요한 것은 리소스 식별!!!

리소스 = 회원이라는 “개념” 자체 → 회원 리소스를 URI에 매핑!!!

** 계층 구조 상 상위를 컬렉션으로 보고 복수 단어 사용 권장 ex) member → members

리소스와 행위를 분리해야 함 → URI와 Method

 

 

2. HTTP 메서드 - GET, POST

GET : 리소스 조회

  • 서버에 전달할 데이터는 query를 통해 전달
  • 메시지 바디 사용 가능하지만, 권장 X

POST : 요청 데이터 처리 → 주로 등록에 사용

  • 메시지 바디를 통해 서버로 요청 데이터 전달
  • 주로 신규 리소스 데이터 등록, 프로세스 변경(요청 데이터 처리.. control URI), 다른 메서드로 처리하기 애매한 경우
  • 리소스 URI에 POST 요청이 오면 요청 데이터 처리를 리소스마다 따로 정함

기타 메서드

  • HEAD : GET과 동일, 메시지 부분 제외 상태줄과 헤더만 반환
  • OPTIONS : 대상 리소스에 대한 통신 가능 옵션 설명 → 주로 CORS에서 사용
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

 

 

3. HTTP 메서드 - PUT, PATCH, DELETE

1) PUT : 리소스 완전히 대체 → 해당 리소스가 없으면 생성

  • 클라이언트가 리소스 위치를 정확히 알고 URL 지정

2) PATCH : 리소스 부분 변경 → 사용 불가할 경우 POST로 대체

3) DELETE : 리소스 삭제

 

4. HTTP 메서드 속성

1) 안전(Safe)

  • 호출해도 리소스를 변경하지 않음

2) 멱등(Idempotent)

  • 몇 번을 호출하든 결과가 동일 → GET, PUT, DELETE
  • POST는 여러 번 호출 시 같은 데이터가 여러 개 누적해 생성될 수 있음
  • 자동 복구 메커니즘 → 서버가 TIMEOUT 등 정상 응답 못할 경우, 클라이언트가 동일한 요청 반복 가능
  • 외부 요인으로 인한 중간 리소스 변경은 고려 X

3) 캐시 가능(Cacheable)

  • 응답 결과 리소스를 캐시해서 사용 가능 여부
  • 실제로는 GET, HEAD 정도만 캐시로 사용
  • POST, PATCH는 본문 내용까지 캐시 키로 사용해야 하기 때문에 권장 X

 

 

5. 클라이언트 → 서버 데이터 전송

1) 데이터 전송 방식

(1) 쿼리 파라미터

  • 주로 GET 메소드
  • 주로 정렬 필터나 검색어 등에 사용

(2) 메시지 바디

  • 주로 POST, PUT, PATCH 메소드
  • 주로 회원 가입, 상품 주문, 리소스 등록, 리소스 변경 등에 사용

 

2) 4가지 상황

(1) 정적 데이터 조회

  • 이미지, 정적 텍스트 문서
  • 조회는 GET 메소드 사용
  • 쿼리 파라미터 미사용 → 단순한 리소스 경로로 조회 가능

(2) 동적 데이터 조회

  • 검색, 정렬 필터
  • 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건
  • 조회는 GET 메소드 사용
  • 쿼리 파라미터 사용해 데이터 전송

(3) HTML Form을 통한 데이터 전송

  • HTML의 form tag 사용 → 웹 브라우저가 요청 http 메시지 생성
  • method = “post”
    • Content-Type: application/x-www-form-urlencoded → form 내용을 메시지 바디를 통해 전송(key-value), 전송 데이터 url 인코딩 처리
    • 입력 내용은 http 메시지 body
  • method = “get”
    • 입력 내용을 쿼리 파라미터로 변경
  • Content-Type: multipart/form-data → 다른 종류의 여러 파일과 form 내용 함께 전송

(4) HTML API를 통한 데이터 전송

  • 클라이언트에서 서버로 바로 데이터를 전송해야 하는 경우 → 서버 to 서버, 앱, 웹(js를 통한 통신)
  • Content-Type: application/json 주로 사용 → text, xml, json
  • post, put, patch, get 모두 사용 가능

 

6. HTTP API 설계 예시

API URI 설계는 리소스 기반으로 작성할 것!!

(1) 회원 관리 시스템 - POST

  • 클라이언트는 등록될 리소스의 URI를 모름
  • 서버가 새로 등록된 리소스 URI를 생성해 Location 필드로 응답
  • 컬렉션 : 서버가 관리하는 리소스 디렉터리 → 서버가 리소스의 URI를 생성하고 관리

 

(2) 파일 관리 시스템 - PUT

  • 클라이언트가 리소스 URI를 알고 있어야 함
  • 클라이언트가 직접 리소스의 URI를 지정
  • 스토어 : 클라이언트가 관리하는 리소스 저장소 → 클라이언트가 리소스의 URI를 알고 관리

 

(3) HTML FORM 사용

  • GET, POST만 지원
  • 컨트롤 URI : 메소드 제약을 해결하기 위해 동사로 된 리소스 경로 사용
반응형

'STUDY > Network' 카테고리의 다른 글

Ch05. HTTP헤더1 - 일반 헤더  (1) 2024.12.15
Ch04. HTTP 상태코드  (1) 2024.12.14
Ch02. URI와 웹 브라우저 요청 흐름, HTTP  (2) 2024.12.05
Ch01. 인터넷 네트워크  (0) 2024.12.05