HTTP 특징

비 연결성(connectionless)

무상태 프로토콜

  • 서버가 클라이언트의 상태를 보존하지 않는다.
  • 장점: 서버 확장성 높음(스케일 아웃)
  • 단점: 클라이언트가 추가 데이터 전송

클라이언트 서버 구조(Request, Response)

거의 모든 형태의 데이터 전송 가능

 

 

HTTP 메시지 구조

https://developer.mozilla.org/ko/docs/Web/HTTP/Messages

start line, header, body 로 이뤄진다.

 

start line

요청과 응답은 살짝 다르다.

 

요청(request-line)은 HTTP 메서드와 HTTP버전이 나온다.

응답(status-line)은 HTTP버전과 HTTP 상태코드가 온다.

 

 

 

HTTP 헤더

HTTP 전송에 필요한 모든 부가정보가 들어간다.

표준헤더를 주로 사용하나 커스텀 헤더도 만들어 사용할 수 있다. 

 

 

HTTP 메시지 바디

html 문서일 수도, 이미지일 수도, JSON일 수도 사실상 거의 모든 데이터를 전송할 수 있다.

 

 

 

 

HTTP API 설계 예시

안좋은 예시

  • 회원 목록 조회 /read-member-list
  • 회원 조회 /read-member-by-id
  • 회원 등록 /create-member
  • 회원 수정 /update-member
  • 회원 삭제 /delete-member

문제는 location 위치에 의미를 부여했다.

location은 말그대로 리소스 위치만을 표현해야한다.

 

좋은 예시

  • 회원 목록 조회 /members
  • 회원 조회 /members/{id}
  • 회원 등록 /members/{id}
  • 회원 수정 /members/{id}
  • 회원 삭제 /members/{id}

계층 구조상 상위를 컬렉션으로 보고 복수단어 사용 권장한다.

각 url 행동을 식별하는 것은 HTTP 메서드로 정한다.

GET 리소스 조회

POST  요청 데이터 처리, 주로 등록에 사용한다. 

PUT 리소스 대체, 없으면 생성

PATCH 리소스 부분 변경

DELETE 리소스 삭제

 

 

HTTP 주요 메서드 설명

GET

  • 리소스 조회 시 서버에 전달할 데이터를 쿼리 파라미터 형식으로 보낸다.
  • www.검색사이트.com?query=검색어

POST

  • 요청 데이터 처리, 상당히 애매한 표현일 수도 있으나, 실제로 애매하면 전부 POST로 처리한다. 실제로 삽입수정삭제 전부 POST로 처리하는 곳도 있다.
  • 메시지 바디를 통해 서버로 요청 데이터를 전달한다.

PUT

  • 리소스가 있으면 대체, 아니면 생성
  • POST로도 생성이 가능한데 차이는 PUT은 정확히 리소스 위치를 클라이언트가 정한다.

 

HTTP 메서드의 속성

안전(Safe Methods)

  • 리소스를 변경하는가

멱등(Idempotent Methods)

  • 언제나 몇 번을 호출해도 항상 동일한 결과를 도출하는지.
  • POST가 멱등성을 중족하지 않는다. 이 문제로 PRG(POST-Redirect-GET) 패턴이라는 것이 존재한다.
  • 예컨데 POST요청으로 주문하는데 클라이언트가 실수로 두 번 클릭했다. 주문이 두 번 처리된다.

캐시가능(Cacheable Methods)

  • 응답 결과를 캐시가 가능한지

 

 

 

 

 

 

 

+ Recent posts