REST API 란 ?
- REpressentational State Transfer
- 네트워크 상에서 클라이언트와 서버의 통신방식중 하나
- 인터넷상의 시스템간의 상호 운용성을 제공하는 방법중 하나
- Http Method 를 통해 Resource를 처리하기 위한 아키텍쳐
- Resource의 Representation에 의한 상태 전달
REST API 의 특징
1. uniform interface
identification of resources
-
리소스 식별
-
각각의 리소스는 URI를 구분자로 식별이 가능해야 한다.
-
하단의 예시 참조
-
example.com/v2/task task list
-
example.com/v2/tasks/2 id가 2 인 task
-
example.com/v2/tasks/14 id가 14 task
manipulation of resource through represenations
- 표현을 통한 리소스 처리
- 요청시 리소스 자체를 응답하는것이 아닌 리소스의 표현 ( JSON, XML , HTML ) 방식 으로 응답하는것.
- 클라이언트는 요청시 리소스의 표현방식을 요청할수 있다.
self-descrive messages
-
스스로 메세지에 대한 설명이 가능해야 함.
-
메세지가 변하더라도 클라이언트는 바뀐 메세지를 보고 해석이 가능해야함.
-
헤더에 profile이란 타입으로 문서의 링크만을 걸어도 self descrive 해짐
-
하지만 헤더는 여러 브라우저에서 지원을 안함
-
그래서 hal (Hypertext Application Language) 이란 방식으로 응답 본문에 profile 을 넣어줌.
-
content-type 의 head는 iana에 등록되어 있다.
-
iana에 등록되어 있는 스펙에 따라 해석이 가능해짐.
hateoas
-
링크정보를 동적으로 바꿀 수 있다.
-
서버가 링크정보를 바꾸더라도 클라이언트가 그 링크의 의미를 파악을 해서
이동을 한다면 실제 URI가 변하더라도 상관이 없음. -
클라이언트는 그 링크 정보만을 보고 다음상태로 전이할수 있어야함.
-
다음 상태로 전이 할수 있는 링크가 존재하면 됨.
2. Client - Server
-
client - server 구조로 이루어여 한다.
-
server와 client의 역할이 명확하게 구분되어져 있으므로 개발하기 편하고
서로간의 의존성도 줄어듬
3. Stateless
-
무상태성
-
작업을위한 상태정보를 별도로 저장하거나 관리하지 않는다.
-
세션정보나 쿠키를 저장하지 않기때문에 서버의 역할이 줄어들고 구현이 더욱 단순해짐.
4. Cacheable
-
캐시 가능
-
다른 상황에 영향을 받지 않고 독립적이므로 캐싱이 가능해진다.
-
네트워크를 사용하는 비용이 줄어든다.
5. Layered System
- 계층 구조 시스템
- 클라이언트 입장에서는 호출만 하기 때문에 서버가 계층으로 되어있는지 알수가 없다.
- 서버는 사용자 인증, 암호화 , 로드밸런싱 등 의 계층을 추가할수 있고
- msa의 api gateway 또는 proxy를 이용한 구현이 가능해짐.
6. Code on Demand (Optional)
- 서버에서 코드를 클라이언트로 보내서 실행할수 있어야한다.
- 대표적으로 html에서의 javascript
- 하지만 서버에서 제공되는 코드를 실행하기 때문에 보안문제를 야기시킨다.
api gateway 설명