REST

참고 티스토리 블로그

REST는 REpresentational State Transfer의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.
즉 REST는 HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다.

REST 구성 요소

자원(Resource) : HTTP URI
자원에 대한 행위(Verb) : HTTP Method
자원에 대한 행위의 내용(Representations) : HTTP Message Pay Load

REST 특징

Server-Client(서버-클라이언트 구조)
Stateless(무상태)
Cacheable(캐시 처리 가능)
Layered System(계층화)
Uniform Interface(인터페이스 일관성)

REST 장점

HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없다.
HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해 준다.
HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
서버와 클라이언트의 역할을 명확하게 분리한다.

REST 단점

표준이 존재하지 않아 정의가 필요하다.
HTTP Method 형태가 제한적이다.
브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구된다.
구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다. (익스플로어 등)

REST API

참고
티스토리 블로그

REST는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해(HTTP-URI) 사용되는 소프트웨어 아키텍처(인터페이스)이다.
RESTful API는 REST 규칙을 준수하도록 아키텍처가 설계된 API이다. 효율적인 소프트웨어 통신 표준을 따르므로 안전하고 신뢰할 수 있는 정보 교환이 가능하도록 한다.

API

Application Programming Interface는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의한다. 개발자는 다른 애플리케이션에서 프로그래밍 방식으로 접근(통신)할 수 있도록 API를 표시하거나 생성한다. 웹 API는 클라이언트와 웹 리소스 사이의 게이트웨이라고 생각할 수 있다.
클라이언트는 웹에서 정보에 접근하려는 사용자이며 API를 사용하는 사람이거나 소프트웨어 시스템일 수 있다.

REST API 장점

확장성 : 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 프로그램을 확장할 수 있다.
유연성 : 클라이언트-서버를 분리하며 다양한 서버 구성 요소를 단순화하여 각 부분이 독립적으로 발전할 수 있도록 한다. 로직을 수정하지 않고 데이터베이스 계층 변경 등의 작업을 수행할 수 있다.
독립성 : 사용하는 기술과는 독립적이다. 때문에 API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 작성할 수 있다.

REST 제약조건

  1. Client – Server
    API를 통해 정보를 교환하는 주체는 클라이언트와 서버 구조를 가져야한다. 또한, 클라이언트와 서버를 분리함으로써 서로 의존하지 않는 구조를 가져야한다.

  2. Stateless – 무상태
    클라이언트와 서버 모두, 통신하는 상대의 상태를 저장하지 않는다. 클라이언트에서 서버로의 요청에는 그 요청을 이해하는 데 필요한 모든 정보가 포함되어있어야 한다.

  3. Cache - 캐시처리 가능 여부
    요청에 대한 응답 내의 데이터에 캐시 가능여부가 명시되어 있어야한다.

  4. Uniform Interface
    전체적인 시스템 아키텍처를 파악할 수 있도록 약속된 인터페이스를 제공해야한다.

  5. Layered System - 계층화 시스템
    클라이언트는 서버에 직접 연결되었는지, 중간 서버를 통해 연결되었는지 알 수 없어야한다.

  6. Code-On-Demand (Optional)
    Server에서 보낸 코드를 Client에서 실행할 수 있어야한다. (ex - Java Script)