티스토리 뷰

카테고리 없음

REST

DUCKBAE's 2022. 11. 21. 23:49

과연 나는 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 이다.

 

 

참고

https://ko.wikipedia.org/wiki/REST

https://www.youtube.com/watch?v=RP_f5dMoHFc

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함