HTTP & RESTful HTTP API

yojuyoon·2020년 7월 8일
1

TIL👌

목록 보기
13/23
post-thumbnail

HTTP란?

  • HyperText Transfer Protocol
    하이퍼 텍스트 문서를 교환하기 위해 만들어진 통신 규약.
  • 프론트앤드와 서버와 클라이언트간의 통신에 사용 또한 백엔드와 프론트앤드 서버간의 통신에도 사용.
  • TCP/IP의 특성을 가지고 통신을 한다.

HTTP 핵심요소

  • HTTP 기본적으로 요청과 응답 구조로 되어있다. 클라이언트가 request를 서버에 보내면 서버는 response를 보내는 구조. 둘 중 하나가 실패하면 실패. 무조건 둘 다 이루어져야한다.
  • HTTP는 상태를 저장하지 않는다. 즉 요청이 오면 응답을 할 뿐 요청/응답끼리 연결되어 있지 않다는 뜻이다. 각각의 요청/ 각각의 응답.
    대표적으로 로그인 기능.(이런 특성 때문에 로그인 저장 시에 로컬스토리지나 세션 스토리지, 쿠키 등을 장치로 사용하는 것이다.)
    ex)클라이언트가 요청을 보내고 응답을 받은 후 조금있다 다시 요청을 보낼 때 전에 보낸 요청이나 응답에 대해 알지 못한다는 뜻

HTTP Request 구조

Start line : HTTP request의 첫 라인

  • HTTP Method : 해당 request가 의도한 action을 정의하는 부분
  • Request target : 해당 request가 전송되는 목표 uri. 내가 요청하고 싶은 엔드포인트 주소
  • HTTP Version : 사용되는 HTTP버전
    GET /search HTTP/1.1

headers : 해당 request에 대한 추가정보를 담고있는 부분

  • Key:Value 값으로 되어있음
  • Headers도 크게 3부분으로 나뉨
  • 자주 사용되는 정보
    Host : 요청이 전송되는 target의 host url
    User-Agent : 요청을 보내는 클라이언트의 대한 정보(웹 브라우저에 대한 정보)
    Accept : 해당 요청이 받을 수 있는 응답 타입
    Connection : 해당 요청이 끝난 후에 클라이언트와 서버가 계속해서 네트워크 커넥션을 유지할 것인지 아니면 끊을 것인지에 대해서 지시하는 부분
    Content-Type : 해당 요청이 보내는 메세지 body의 타입 예를들어 JSON(JavaScript Object Notation)을 보내면 application/json
    Content-Length : 메세지 body의 길이
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json
Content-Length: 257
Host: google.com
User-Agent: HTTPie/0.9.3

body : 해당 request의 실제 메세지/내용 (body가 없는 request도 많음 예) GET request)

POST /payment-sync HTTP/1.1

Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: intropython.com
User-Agent: HTTPie/0.9.3

{
    "imp_uid": "imp_1234567890",
    "merchant_uid": "order_id_8237352",
    "status": "paid"
}//JSON type

HTTP Response구조

Response도 request와 마찬가지로 크게 3부분으로 구성

Status Line : Response의 상태를 간략하게 나타내주는 부분

  • HTTP 버젼
  • Status code : 응답 상태를 나타내는 숫자 코드200
  • Status text : 응답 상태를 간략하게 설명해주는 부분 Not Found
HTTP/1.1 404 Not Found

Header : Response의 header와 동일하지만 response에서만 사용되는 header값으로 User-Agent대신 Server헤더가 사용(서버의 정보ex)우분투...리눅스...)

Body : Response body와 동일 JSON data

HTTP Methods

GET(자주사용)

  • 어떤 데이터를 서버로부터 받아올 때 사용
  • 데이터 생성/수정/삭제 없이 받아오기만 할 때 사용
  • 가장 간단하고 많이 사용되는 HTTP Method
  • 주로 데이터를 받아올 때 사용되기 때문에 request body를 안보내는 경우가 많음

POST(자주사용)

  • 데이터를 생성/수정/삭제할 때 주로 사용
  • 데이터를 생성 및 수정할 때 사용되기 때문에 request body가 포함되서 보내짐

OPTION

  • 주로 요청 URI에서 사용할 수 있는 메소드를 받아올 때 사용
  • /update uri에서 어떤 메소드를 요청 가능한지 알고싶으면 먼저 옵션 요청을 사용해서 확인하게 됨.

PUT

  • post와 비슷
  • post에 밀려서 최근 몇년간 잘 사용되지 않음

DELETE

  • 특정 데이터를 서버에 삭제 요청 보낼 때 쓰임
  • post에 밀려서 잘 안사용됨..

자주 쓰이는 HTTP Status Code

  • 200 OK : 문제없이 잘 실행되었을 때
  • 301 Moved Permanetly : 해당 URI가 다른 주소로 바뀌었을 때
  • 400 Bad Request : 해당 요청이 잘못되었을 때(주로 input값이 잘못되었을 때)
  • 401 Unauthorized : 유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요하다는 것을 나타낼 때
  • 403 Forbidden : 유저가 해당 요청에 대한 권한이 없을 때
  • 404 Not Found : 요청된 uri가 존재하지 않을 때
  • 500 Internal Server Error : 서버 에러났을 때

RESTful HTTP API

  • URI(Uniform Resource Identifier)
    해당 사이트의 특정 자원의 위치를 나타내는 유일한 구조. 경로 체계
    URI 와 URL은 다르다! URI 안에 URL이 있다고 볼 수 있음

  • HTTP Method
    POST, GET 등등.. HTTP request가 의도하는 액션을 정의한 것

  • Payload
    HTTP request에서 보내는 데이터(body)

RESTful API

REpresentational State Transfer

  • 웹상에서 사용되는 여러 리소스를 HTTP URI로 표현하고 그 리소스에 대한 행위를 HTTP Method로 정의하는 방식.
  • 주로 GETPOST만 사용한다.
    -예 ) 삼성전자 주식정보를 받기위한 HTTP 요청 : HTTP GET https://api.trueshort.com/stock/005930
    유저의 보유 주식 종목들을 DB에 저장하는 HTTP 요청 :
HTTP POST https://api.trueshort.com/user/portfolio

{
    "user_id" : 1,
    "stocks": [ 
        "005930",
        "298730",
        "378900"
    ]
}

RESTful API의 장점과 유의할 점

  • 여러 장점들 중 가장 명확한 점은 self-descriptiveness
  • 자체만으로도 API의 목적이 쉽게 이해가 감. 예를들어 위에서 보여준 삼성전자 주식에 관한 정보를 HTTP요청정보를 보면 문서나 주석이 없어도 정보를 해석할 수 있다.

유의할 점!!

  • 경로가 끝난 뒤에 / 치면 그 뒤에 경로를 의미하므로 경로가 끝나면 / 를 입력하면 안된다.
  • URI에 _(underscore)는 주로 포함하지않고 영어 대문자보다는 소문자를 쓴다. 너무 긴 단어도 잘 사용하지않는데, 이 모든 것은 가독성을 높이기 위한 것!
  • URI는 명사를 사용한다.
profile
하고싶은게 많은 사람. Front-end Developer

0개의 댓글