REST 란
"REpresetational State Transfer" 의 약자로
REST는 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에
웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
해당 자원(URI)에 대한 CRUD Operation을 적용된다.
API 란
애플리케이션 프로그래밍 인터페이스 (Application Programming Interface)의 약자이다.
프로그램들이 서로 상호작용 하는 것을 도와주는 매개체로
다른 소프트웨어 시스템과 통신하기 위해 따라하는 규칙을 정의한 것이다.
개발자들이 애플리케이션 코드를 작성하는 방법을 표준화함으로써, 간소화되고 빠른 프로세스 처리를 가능하게 한다.
RESTful API 란
RESTful API은 REST의 설계규칙을 잘 지켜 설계된 API를 말한다.
REST의 구성요소
REST는 3가지로 구성이 되어있다.
자원(Resource) : HTTP URI
자원에 대한 행위(Verb) : HTTP Method
자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load
REST의 특징
1. Server-Client (서버-클라이언트 구조)
- REST server는 API를 제공하고 비즈니스 로직 처리 및 저장을 책임지고
Client는 사용자 인증이나 context (세션, 로그인 정보) 등을 직접 관리하고 책임진다.
클라이언트와 서버의 역할을 분리함으로써 서로 의존하지 않는 구조를 가져야 한다.
2. Stateless (무상태)
- Server는 Client의 context를 저장하지 않고,
각각의 요청을 완전히 별개의 것으로 인식하고 처리한다.
클라이언트와 서버 모두 통신하는 상대의 상태를 저장하고 있지 않아야한다.
즉, 요청이 들어올 때 마다 상대가 누구인지 파악할 수 있어야 한다.
3. Cacheable (캐시 처리 가능)
- HTTP라는 기존 웹표준을 그대로 사용하기 때문에 웹에서 사용하는 기존 인프라 그대로 활용할 수 있다.
즉, HTTP가 가진 캐싱 기능을 적용할 수 있다.
4. Layered System (계층화)
- REST server는 Proxy, Gateway 같은 네트워크 기반의 중간 매체를 사용 할 수 있지만,
Client는 Server와 직접 통신하는지, 중간 서버와 통신하는지 알 수 없어야 한다.
5. Uniform Interface (인터페이스 일관성)
- 전체 시스템을 파악할 수 있는 인터페이스를 제공해야한다.
전체적인 시스템 아키텍처를 간단하고 잘 파악할 수 있도록 약속된 인터페이스를 제공해야한다.
이 인터페이스를 일반화 시킴으로써, Client-Server 간의 결합도를 낮출 수 있다.
- 4가지 아키텍처 제약조건
1. 리소스가 URL로 식별되어야 한다.
2. 리소스를 입력/수정/삭제 시 HTTP 메시지에 그 표현을 담아 전송해야 한다.
3. 명확한 메시지를 전송해 메시지만으로 해석이 가능해야 한다.
4. 서버는 클라이언트가 더 많은 리소스를 동적으로 검색할 수 있또록 하이퍼링크를 넣어 전송한다.
6. Self-Descriptiveness (자체표현)
- 요청 메시지만으로도 쉽게 이해할 수 있어야 한다.
REST의 장점
1. REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
2. 1개의 URI로 4개의 행위(CRUD)를 명시할 수 있기 때문에 효율적이다.
3. 클라이언트와 서버가 독립적이기 때문에 HTTP 프로토콜 서비스라는 기본적인 요구만 충족되면 다양한 플랫폼에서 원하는 서비스를 쉽고 빠르게 개발하고 배포할 수 있다.
REST의 단점
1. HTTP Method 형태가 제한적이다.
2. 표준이 존재하지 않아 (=가이드가 없다) 정의가 필욯다.
3. 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.(익스폴로어)
REST의 규칙
1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.
❌ http://devjanghwa.com/Pory
⭕ http://devjanghwa.com/pory
2. 마지막에 슬래시 (/)를 포함하지 않는다.
❌ http://devjanghwa.com/pory/
⭕ http://devjanghwa.com/pory
3. 언더바 대신 하이폰을 사용한다.
❌ http://devjanghwa.com/pory_yong
⭕ http://devjanghwa.com/pory-yong
4. 파일확장자는 URI에 포함하지 않는다.
❌ http://devjanghwa.com/pory.jpg
⭕ http://devjanghwa.com/pory
5. 행위를 포함하지 않는다.
❌ http://devjanghwa.com/delete-post/1
'CS공부' 카테고리의 다른 글
[HTTP] HTTP의 개념 및 진화 (0) | 2023.07.13 |
---|---|
API (애플리케이션 프로그래밍 인터페이스) 란? (0) | 2023.07.07 |
절차지향 언어 VS 객체지향 언어 (0) | 2023.07.03 |
MVC 패턴이란 (Model-View-Controller) (0) | 2023.06.29 |
[JAVA] Enum(열거형) 개념과 예제 (0) | 2023.06.27 |