-
Rest API ?개발 2020. 12. 3. 21:49
API ?
Application Programming Interface의 약자.
응용 프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
REST?
Represetational State Transfer의 약자.
인터넷 상 서로 다른 시스템 간의 상호 운용성을 제공하는 방법중 한가지로 시스템 각각의 독립적인 진화를 보장하기 위한 방법.
HTTP 통신에서 URI를 통해 자원을 명시하고 HTTP METHOD(GET, POST, DELETE, PUT)을 사용해 해당 자원에 대한 Method Operation을 적용하는 것을 의미한다.
웹상에서 사용되는 여러 리소스를 HTTP URI로 표현하고, 그 리소스에 대한 행위를 HTTP Method로 정의 하는 방식.
웹을 깨뜨리지 않고 HTTP를 진화시키는 방법이라고도 한다.
단점
표준이 존재하지 않고, 사용할 수 있는 Method가 제한적이다.
REST의 구성
자원(Resource) - URI (자원의 식별자를 뜻한다. URL은 자원의 위치를 알려주는 것, URI가 더 상위 개념)
- 모든 자원에는 고유한 ID 존재, 자원은 Server에 존재한다.
- 자원을 구별하는 ID는 Server와 Client간 주고 받는 HTTP URI이다.
- Client는 URI를 이용하여 자원을 지정하고 자원의 상태에 대한 조작을 Server에 요청할 수 있다.
행위(Verb) - HTTP METHOD
- HTTP Protocol의 Method인 GET, POST, DELETE, PUT을 사용한다. Request 구조
표현(Representations)
- Client가 자원의 상태에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보낸다.
- REST에서 하나의 자원은 JSON, XML, TEXT 등 여러 형태의 표현방식으로 나타내어 질 수 있다.
REST API Architecture
Client - Server
- REST Server는 API 제공, Client는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고, 서로간 의존성이 줄어들게 된다.
Stateless (무상태성)
- 작업을 위한 상태정보를 따로 저장하지 않는다.
- 세션정보나 쿠키정보를 별도로 저장하거나 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 된다. (기존의 쿠키나 세션에 하는 처리를 하지 않음)
- 무상태성 때문에 자유도가 높아지고, 서버에서 불필요한 정보를 관리하지 않아도 되어 구현이 단순해진다.
Cacheable
- REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹 표준을 그대로 사용하는 것인데, 웹에서 사용하는 기존 인프라를 그대로 활용할 수 있다.
- HTTP가 가진 캐싱 기능이 적용 가능하다.
- HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하여 캐싱 구현 가능.
Uniform Interface
- URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일
- self-descriptiveness(자체 표현 구조) - REST API의 메세지만 보고도 이게 무엇인지 쉽게 이해 할 수 있는 자체 표현 구조로 되어있어야 한다. 즉 메세지를 통해 현재 메세지가 무엇을 설명하는지 알 수 있어야 한다.
- HATEOS - 하이퍼 미디어 링크를 통해 애플리케이션의 상태 변화가 가능 해야한다.
Layered System
- REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 Proxy, Gateway 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.
'개발' 카테고리의 다른 글
스프링과 스프링 부트의 차이 (0) 2020.12.08 MSA? (0) 2020.12.04 이것저것 공부한거 (Proxy, Transaction) (0) 2020.11.30 Spring AOP (0) 2020.11.30 Spring 기초 (0) 2020.11.28