본문 바로가기
공부/(공부일기) 프로그래밍

REST, REST API, RESTful 이해하기

by demonic_ 2020. 4. 23.
반응형

# REST(Representational State Transfer)란?

자원을 이름으로 구분해 자원의 상태를 주고 받는 것

자원이란?

해당 소프트웨어가 관리하는 모든 것

자원의 표현이란?

이름을 명시적으로 정하는 것. 예를들면 고객을 customer 등으로 정의

상태란?

자원의 상태(정보)를 전달하는 것. 주로 JSON과 XML을 통해 주고받는다.(TEXT, RSS 등도 가능)

REST는 웹 기술인 HTTP프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.

HTTP URI를 통해 자원을 명시하고 HTTP 메소드(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미

웹 사이트의 모든 자원에 고유한 ID인 HTTP URI를 부여한다

다음과 같은 규칙을 갖는다.(보통은 그렇게 잘 안지켜지는 경우도 있다)

POST => Create (생성)

GET => Read (조회)

PUT => Update (수정)

DELETE => Delete (삭제)


## REST의 장점

- HTTP 프로토콜 인프라를 그대로 사용하기 때문에 REST API 사용을 위한 추가 인프라가 없어도 된다

- HTTP 표준 프로토콜을 따르는 모든 플랫폼에 사용이 가능하다

- HTTP URI 와 메서드를 통해 의도하는 바를 쉽게 파악할 수 있다

- 서버와 클라이언트 역할을 분리할 수 있다

## REST의 단점

- 표준이 없다

- 사용할 수 있는 메서드가 4가지 밖에 없다.

- 구형 브라우저에서 아직 지원하지 못하는 부분이 있다

- PUT, DELETE 등

## 기타

- HTML의 FORM을 사용할때도 put과 delete는 지원하지 않는다.

    - 관련링크: http://haah.kr/2017/05/23/rest-http-method-in-html-form/

 

 

## REST 특징

1. Server-Client(서버와 클라이언트) 구조

- 자원이 있는 쪽이 서버, 요청하는 쪽이 클라이언트가 된다.

- 서로간의 의존성이 줄어든다

2. Stateless(무상태)

- 클라이언트의 context를 서버에 저장하지 않는다.

- 이전 요청과 다음 요청 처리에 연관성이 없다

3. Cacheable(캐시 처리 가능)

- HTTP가 가진 강력한 특징 중 하나인 캐싱 기능 적용 가능

- HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현이 가능

- 캐시 사용을 통해 응답시간이 빨라지고 별도의 트랜잭션이 발생하지 않기 때문에 정체 응답시간, 성능, 서버 자원 이용률을 향상시킬 수 있다.

4. Layered System(계층화)

- REST Server는 다중 계층으로 구성될 수 있다

    - API 서버에서는 비지니스 로직만 수행하고, 그 앞에 보안과 로드밸런싱, 암호화, 공유 캐시, 사용자 인증을 추가/제거하는 등 유현성을 갖는다

- PROXY, 게이트웨이 같은 네트워크 기반 중간 매체를 사용할 수 있다

- 클라이언트가 알 수 없게 적용 가능하다(독립적)

5. Code-On-Demand(optional)

- 클라이언트가 리소스에 대한 표현을 응답받고 처리하는데, 어떻게 처리할지에 대한 Code를 서버에서 제공하는 것

6. Uniform Interface

- URI로 지정한 리소스 조작을 통일되고 한정된 인터페이스로 수행한다

    - 리소스 식별

        - http://test.com/user # user 정보 목록

        - http://test.com/user/2 # id 2번 유저 정보

- 표현을 통한 리소스 처리

        - URI에 user, pay 등 명시적으로 표현

- 자기 서술형 메세지


# REST API 란?

REST를 기반으로 서비스 API를 구현한 것

REST API의 특징

- 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 유연하게 할 수 있다

- HTTP 표준을 기반으로 구현하므로 HTTP를 지원하는 프로그램 언어 어떤것이든 사용 가능하다

REST API 설계 규칙

- 구분자 '/'는 계층 관계를 나타내는데 사용한다

- http://test.com/user/age

- URI 마지막 문자로 '/'를 포함하지 않는다

- 가독성을 위해 하이픈(-)을 권장한다

- URI 경로에는 소문자 사용을 권장한다

설계 예시

- 목록 표시: [GET] /member

- 1개 내용 조회: [GET] /member/:id

- 생성: [POST] /member

- 수정: [PUT] /member

- 삭제: [DELETE] /member

응답상태 코드(http status)

- 1xx: 전송 프로토콜 수준 정보 교환

- 2xx: 클라이언트 요청이 성공적으로 수행도미

- 3xx: 클라이언트 요청을 완료하기 위하 추가행동 필요

- 4xx: 클라이언트의 잘못된 요청

- 5xx: 서버 오류


 

# RESTful 이란?

- REST 아키텍처를 구현하는 웹서비스를 나타내기 위해 사용되는 용어

- REST API를 제공하는 웹서비스를 RESTful 하다고 표현

 

 

RESTful 목적

- 이해하기 쉬운 REST API를 만드는 것

- 호환성과 유연성을 위해 만드는 것이며, 반드시 필요하지 않다면 구현할 필요 없음

 

RESTful 하지 못한 경우

- CRUD를 모두 특정 메서드(예를들어 GET, POST만 사용)만 사용하는 API

- URI에 리소스 표현이나 id외 정보가 들어가는 경우 (/member/update)

 

반응형

'공부 > (공부일기) 프로그래밍' 카테고리의 다른 글

JPA, 정말 최선일까  (0) 2020.04.08

댓글