# 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 설계 규칙
- 구분자 '/'는 계층 관계를 나타내는데 사용한다
- 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 |
---|
댓글