[네트워크] HTTP, REST API

승 아·2023년 4월 11일

HTTP

  • 웹 브라우저와 웹 서버의 소통을 위한 프로토콜
  • HTML과 같은 문서를 전송하기 위한 Application Layer 프로토콜
  • 클라이언트가 HTTP messages 양식에 맞춰 request 보내면 서버도 HTTP messages 양식에 맞춰 응답

HTTP messages

  • 클라이언트와 서버 사이에서 데이터가 교환되는 방식
  • 요청, 응답 유형으로 나누어짐
  • 구조
    head에 startline과 HTTP headers가, payload에 body가 있음
    • startline : 요청이나 응답 상태
    • HTTP headers : 요청을 지정, 본문을 설명하는 헤더 집합
    • empty line : 헤더와 본문 구분 빈 줄
    • body : 요청, 응답과 관련된 데이터나 문서 포함(선택적 사용)

요청(Requests)

  • start line
  1. 수행할 작업(GET,PUT,POST 등), 방식(HEAD or OPTIONS) 설명하는 HTTP method 나타냄
    ex) GET method는 리소스를 받아야함
  2. 요청 대상(URL or URI), 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성됨
  3. HTTP 버전에 따라 HTTP message의 구조가 달라짐->버전 입력해야함
  • Headers
    • 기본 구조를 따름
  • Body
    • 모든 요청에 body가 필요하지 않음->GET,HEAD,DELETE,OPTIONS처럼 서버에 리소스를 요청하는 경우
    • POST,PUT-> 데이트 업데이트 위해 사용

응답(Responses)

  • Status line(응답의 첫 줄)
  1. 현재 프로토콜 버전
  2. 상태 코드 - 요청 결과 ex)404 200 etc
  3. 상태 텍스트 - 상태 코드에 대한 설명
  • Headers
    • 헤더와 동일한 구조
  • Body
    • 모든 응답에 body가 필요하지 x -> 201, 204 상태코드 가지는 응답
    • Stateless->HTTP의 큰 특징
      HTTP는 통신 규약이므로 상태를 저장하지 않음
      ->필요에 따라 다른 방법(쿠키-세션, API 등)을 통해 상태를 확인할 수 있음

API

  • 서버가 클라이언트에게 리소스를 잘 활용할 수 있도록 제공하는 인터페이스
    즉, 서버가 리소스 전달을 위한 메뉴판같은 역할을 하는 API를 구축해놓아야 클라이언트가 활용
  • 보통 인터넷에 있는 데이터 요청 시 HTTP라는 프로토콜을 사용하여 주소(URL,URI)를 통해 접근

REST API

  • 웹에서 사용되는 데이터나 Resource를 HTTP URI로 표현, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식

REST 성숙도 모델 4단계(좋은 REST API를 디자인하는 방법)

  • 0단계 - 단순히 HTTP 프로토콜 사용해야함
  • 1단계 - 모든 resource는 개별 리소스에 맞는 엔드포인트를 사용해야함, 요청하고 받은 자원에 대한 정보를 응답으로 전달해야 함(성공/실패 여부 반환)
  • 2단계 - CRUD에 맞게 적절한 HTTP 메서드를 사용해야함
    ex)조회 -> GET 메서드 사용하여 요청 보내고, GET메서드는 body를 가지지 않으므로 query parameter를 사용하여 필요한 리소스 전달
    생성 -> POST 메서드 사용하여 요청 보냄, 새로운 생성된 리소스이므로 응답코드도 201 created로 응답해야함, 관련 리소스를 클라이언트가 Location헤더에 작성된 URI를 통해 확인할 수 있어야함
    • 메서드 사용 규칙
      • GET 메서드 : 서버의 데이터 변화시키지 않는 요청 사용
      • POST 메서드 : 요청마다 새로운 리소스 생성->멱등성X
      • PUT 메서드 : 요청마다 같은 리소스를 반환->멱등성을 가짐, 교체 용도
      • PATCH : 수정 용도
  • 3단계
    응답에 리소스의 URI를 포함한 링크 요소를 삽입하여 작성

Open API

  • 누구에게나 열려있는 API
  • 무제한 이용X, 기관이나 API마다 정해진 이용수칙 있으며, 이용수칙에 따른 제한사항이 있을 수 있음

API key

  • API를 이용하기 위해 필요
  • 로그인된 이용자에게만 자원에 접근할 수 있는 권한을 API key의 형태로 제공
  • 데이터 요청 시 API key를 같이 전달해야만 원하는 응답을 받을 수 있음
profile
개발 공부를 기록하는 공간

0개의 댓글