티스토리 뷰
과연 나는 Restful 한 API를 개발하고 있을까? 라는 생각으로부터 시작한다.
그래서 REST 에 대해 알아보기로 한다.
.
.
.
REST(Representational State Transfer)
월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다.
- 자원을 정의하고 자원에 대한 주소를 지정하는 방법을 의미한다.
- URI 로 자원을 명시하고 HTTP Method 를 통해 자원에 대한 CRUD 기능을 적용한다.
구성 요소
Resource (자원)
표현 방법 : HTTP URI
서버에 있는 데이터로 예를 들어 데이터베이스에 user 라는 테이블이 있다고 해보자.
클라이언트가 사용자의 데이터를 가져오려면 URI 에 domain/user 와 같은 형태로 요청한다.
Verb (행위)
표현 방법 : HTTP Method
클라이언트는 HTTP Method를 통하여 자원에 대한 조작을 요청한다.
GET : Read (자원의 정보 조회)
POST : Create (자원 생성)
PUT, PETCH : Update (자원의 정보 업데이트)
DELETE : Delete (자원 삭제)
Representation (표현)
표현 방법 : HTTP Message PayLoad
클라이언트가 서버에게 자원에 대한 조작을 요청하면 서버는 이에 대한 응답(Representation)을 보낸다.
제한 조건
Uniform Interface (인터페이스의 일관성)
HTTP 표준만 따른다면 디바이스나 애플리케이션 타입에 관계 없이 서버와 상호작용할 수 있어야 한다.
이것을 기준으로 Non-REST 와 REST 로 분류할 수 있을 정도로 가장 중요한 부분이다.
Resource identification in requests (자원의 식별)
- 리소스는 요청(URI)에서 식별할 수 있어야 한다.
Manipulation of Resources Through Representations (메세지를 통한 리소스의 조작)
- 클라이언트는 서버의 리소스를 수정하거나 삭제할 수 있는 충분한 정보(HTTP Method)를 포함해야한다.
Self-descriptive Messages (자기 서술적 메세지)
- 각 메세지에는 자신을 어떻게 처리해야 하는지에 대한 충분한 정보를 포함해야 한다.
예를 들어, 서버가 클라이언트한테 전달해주는 Content-Type 이 application/json 이라고 할 때 클라이언트는 해당 json에 대한 정보가 무엇을 의미하는 지 알수 없다. 따라서 해당 정보가 어떤 의미를 포함하고 있는지에 대한 내용을 충분히 알려주어야 한다.
Hypermedia as the Engine of Application State (HATEOAS - 애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어)
- 클라이언트가 관련된 리소스에 접근하기를 원한다면 리턴되는 지시자에서 구별될 수 있어야 한다.
Client-Server Architecture (클라이언트/서버 구조)
클라이언트와 서버는 독립적이며 서로간의 의존성을 줄인다.
클라이언트는 리소스를 요청하고 각 서버 내부에 남아있는 데이터 스토리지와 관련이 없고,
서버는 리소스를 보유하고 사용자 인터페이스나 사용자 상태와 관련이 없다.
다시말해, 클라이언트는 비즈니스 로직에 알 필요가 없고 서버는 프론트엔드의 UI에 대해 알 필요가 없다.
Statelessness (무상태)
클라이언트의 컨텍스트는 서버에 저장되면 안된다.
Cachebility (캐시 처리 가능)
클라이언트는 캐싱 기능을 활용할 수 있다.
Layered System (계층 구조)
클라이언트와 최종 서버 사이에는 많은 중간 서버가 존재할 수 있다.
중간 서버는 부하분산을 활성화하고 공유 캐시를 제공하여 시스템의 가용성을 높일 수 있다.
클라이언트는 서버와 직접 통신하는지 중간 서버와 통신하는지 알 수 없다.
Code on Demand (optional)
서버에서 코드를 클라이언트로 보내서 실행할 수 있어야 한다.
REST API
REST 아키텍쳐 스타일을 따르는 API 이다.
참고
- Total
- Today
- Yesterday
- 추상클래스
- object
- java
- 자동구성
- fail-fast
- 오블완
- 다중화
- Hash
- Security
- 인터페이스
- spring boot
- JPA
- nosql
- @conditional
- fail-safe
- HashMap
- Red-Black Tree
- nginx
- 고정 세션
- HashSet
- syncronized
- 티스토리챌린지
- Spring
- Sticky Session
- 인스턴스변수
- 정적변수
- Caching
- Load Balancer
- AutoConfiguration
- 로드 밸런서
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |