HTTP
- 웹 브라우저와 웹 서버의 소통을 위한 프로토콜
- HTML과 같은 문서를 전송하기 위한 Application Layer 프로토콜
- 클라이언트가 HTTP messages 양식에 맞춰 request 보내면 서버도 HTTP messages 양식에 맞춰 응답
HTTP messages
- 클라이언트와 서버 사이에서 데이터가 교환되는 방식
- 요청, 응답 유형으로 나누어짐
- 구조
head에 startline과 HTTP headers가, payload에 body가 있음
- startline : 요청이나 응답 상태
- HTTP headers : 요청을 지정, 본문을 설명하는 헤더 집합
- empty line : 헤더와 본문 구분 빈 줄
- body : 요청, 응답과 관련된 데이터나 문서 포함(선택적 사용)
요청(Requests)
- 수행할 작업(GET,PUT,POST 등), 방식(HEAD or OPTIONS) 설명하는 HTTP method 나타냄
ex) GET method는 리소스를 받아야함
- 요청 대상(URL or URI), 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성됨
- HTTP 버전에 따라 HTTP message의 구조가 달라짐->버전 입력해야함
- Headers
- Body
- 모든 요청에 body가 필요하지 않음->GET,HEAD,DELETE,OPTIONS처럼 서버에 리소스를 요청하는 경우
- POST,PUT-> 데이트 업데이트 위해 사용
응답(Responses)
- 현재 프로토콜 버전
- 상태 코드 - 요청 결과 ex)404 200 etc
- 상태 텍스트 - 상태 코드에 대한 설명
- 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를 같이 전달해야만 원하는 응답을 받을 수 있음