1. REST API
- REST API 에서 REST 는 "Representational State Transfer" 의 약자이다.
- 로이 필딩의 박사학위 논문에서 웹의 장점을 최대한 활용할 수 있는 아키텍처라는 명목으로 처음 등장했다.
- HTTP URI 로 웹상의 자원들을 표현하고, HTTP Method 를 통해 상태를 정의하는 방식이다.
## Root - Endpoint ( 혹은 root - URL ) ##
- 요청을 보내는 주소의 시작점을 뜻한다.
- 깃헙 API 의 root - endpoint 는 https://api.github.com 일 것이다.
## Path ##
- path 는 요청을 보내는 리소스를 정의한다.
- https://api.github.com/user 에서 'user'가 path 가 된다.
-----------------------------------------------------------------------------------
2. Request & Response
2 - 1) 메세지 조회
## Request ##
GET /{githubID}/messages
요청을 할 때는 추가적인 파라미터( Query parameter )를 사용할 수 있다.
## Response ##
[
{
"id": 1, // 고유 아이디
"username": "전지호", // 사용자 이름
"text": "안녕하세요", // 본문 내용
"roomname": "로비", // 방이름
"date": "2021-05-24T03", // 작성한 시간
},
// 여러 개의 메세지
]
JSON 형식으로 응답이 온다.
2 - 2) 메세지 추가
## Request ##
POST /{githubID}/messages
- 메세지는 24 시간마다 자동으로 리셋된다.
- 요청 본문엔 다음 내용을 반드시 포함해야 한다.
* 요청 형식 : JSON
* MIME 타입 : application/json
parameter | 형식 | 설명 | 필수 포함 여부 |
username | 문자열 | 사용자 이름 | 필수 |
text | 문자열 | 본문 내용 | 필수 |
roomname | 문자열 | 방 이름 | 필수 |
## Response ##
{
"id": 5
}
JSON 형식으로 응답이 온다.
2 - 3) 메세지 초기화
## Request ##
POST /{githubID}/clear
요청 본문은 필요하지 않다.
## Response ##
{
"message: "message initialized!"
}
성공시 JSON 형식으로 응답이 온다.
-----------------------------------------------------------------------------------
3. REST API 의 디자인
- REST API 는 공식적으로 정해진 뚜렷한 규격이 없다, 그래서 REST API 특징( 원칙 )에 맞춰 조금씩은 다른 모습을 하고 있다.
- 그래도 REST API 의 모범 사례는 여전히 논의되고 통합되고 있기 때문에 수많은 디자인 중에 분명히 보기 좋은 REST API 디자인은 있다.
## REST API 의 기존 5 가지 설계 지침 ##
- 리소스 ( URI )
- HTTP 메소드
- HTTP 헤더
- 쿼리 매개 변수
- 상태 코드
-----------------------------------------------------------------------------------
4. Open API
- "오픈"이라는 말을 통해 알 수 있듯 API 는 누구에게나 열려있다. 그러나 이는 "무제한으로 이용할 수 있다"는 의미는 아니고, 보통은 이용 수칙에 따른 제한( 가격, 정보의 제한 등 )이 존재한다.
## API Key ##
- API 를 이용하기 위해서는 API Key 라는 것이 필요하다. 간혹 필요하지 않은 경우도 있긴 하다.
- 대부분의 경우 비용을 들여 자원을 제공해주는 서버 입장에서, 아무런 조건 없이 익명의 클라이언트에게 정보를 줄 이유가 딱히 없기 때문에 Key 가 필요하다.
'Java Script' 카테고리의 다른 글
JS - SSR & CSR (0) | 2021.05.25 |
---|---|
JS - 클라이언트 서버 (0) | 2021.05.25 |
JS - HTTP (0) | 2021.05.25 |
JS - Tree&Graph Search (0) | 2021.05.14 |
JS - Graph & Tree & BST (0) | 2021.05.13 |