부트캠프

네트워크 - HTTP

hunm719 2023. 1. 30. 23:22

1.HTTP Messages
 -HTTP는 HyperText Transfer Protocol의 줄임말로, HTML과 같은 문서를 전송하기 위한 Application Layer 프로토콜
 -전통적인 클라이언트-서버 모델에서 클라이언트가 HTTP messages 양식에 맞춰 요청을 보내면, 서버도 HTTP messages 양식에 맞춰 응답함

 -HTTP messages는 클라이언트와 서버 사이에서 데이터가 교환되는 방식으로 다음와 같은 두 가지 유형이 있음
  (1)요청(Requests)
  (2)응답(Responses)

HTTP messages의 구조

 -요청(Requests)과 응답(Responses)은 다음과 같은 유사한 구조를 가짐
  (1)start line : 요청이나 응답의 상태를 나타내며 항상 첫 번째 줄에 위치함. 응답에서는 status line이라고 부름
  (2)HTTP headers : 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합
  (3)empty line : 헤더와 본문을 구분하는 빈 줄
  (4)body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함하며 요청과 응답의 유형에 따라 선택적으로 사용함

 +HTTP의 가장 큰 특징, 무상태성(Statless) : HTTP로 클라이언트와 서버가 통신을 주고받는 과정에서, HTTP가 클라이언트나 서버의 상태를 확인하지 않음


2.REST API(Representational State Transfer API)
 -웹 애플리케이션에서는 HTTP 메서드를 이용해 서버와 통신함. 클라이언트와 서버가 HTTP 통신을 할 때는 어떤 요청을 보내고 받느냐에 따라 메서드의 사용이 달라짐
 -요청과 응답을 할 때, '제대로 보내고 받을 수 있는' 일종의 규약이 존재
 -REST API는 웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식을 말함


2-1.좋은 REST API를 디자인하는 방법

Richardson 성숙도 모델(RMM)

 (1)REST 성숙도 모델 - 0단계
  -HTTP 프로토콜을 사용하기

 (2)REST 성숙도 모델 - 1단계
  -개별 리소스와의 통신을 준수
  -모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야 한다는 것과 요청하고 받은 자원에 대한 정보를 응답으로 전달해야 한다는 의미
  -어떤 리소스를 변화시키는지 혹은 어떤 응답이 제공되는지에 따라 각기 다른 엔드포인트를 사용하기 때문에, 적절한 엔드포인트를 작성하는 것이 중요
  -엔드포인트 작성 시에는 동사, HTTP 메서드, 혹은 어떤 행위에 대한 단어 사용은 지양하고, 리소스에 집중해 명사 형태의 단어로 작성하는 것이 바람직한 방법

 (3)REST 성숙도 모델 - 2단계
  -CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것에 중점

  -메서드 사용 규칙
   [1]GET 메서드 같은 경우는 서버의 데이터를 변화시키지 않는 요청에 사용
   [2]POST는 요청마다 새로운 리소스를 생성하고 PUT 은 요청마다 같은 리소스를 반환
    *매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 하며, 멱등성을 가지는 메서드 PUT과 그렇지 않은 POST는 구분하여 사용해야 함
   [3]PUT은 교체, PATCH는 수정의 용도로 사용

 (4)REST 성숙도 모델 - 3단계
  -3단계는 HATEOAS(Hypertext As The Engine Of Application State)라는 약어로 표현되는 하이퍼미디어 컨트롤을 적용
  -요청은 2단계와 동일하지만, 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성한다는 것이 차이점


3.Open API
 -누구에게나 열려있는 API지만 기관이나 API마다 정해진 이용 수칙이 있고, 그 이용 수칙에 따라 제한사항(가격, 정보의 제한 등)이 있음
 -정부는 공공데이터에 쉽게 접근할 수 있도록 Open API의 형태로 제공하고 있음

 +API를 이용하기 위해서는 서버의 문을 여는 열쇠인 API Key가 필요함
 +클라이언트의 요청에 따라 서버에서 응답한다는 말은 결국 서버를 운용하는 데에 비용이 발생한다는 말로 서버 입장에서 아무런 조건 없이 익명의 클라이언트에게 데이터를 제공할 의무도, 이유도 없음
  *로그인된 이용자에게만 자원에 접근할 수 있는 권한을 API Key의 형태로 제공하고, 데이터를 요청할 때 API key를 같이 전달해야만 원하는 응답을 받을 수 있음

 

 

 

 

 

-이미지 및 내용 출처 : code states