728x90
REST 정의
- Representational State Transfer(대표적인 상태 전달)의 약자
- 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식
- REST 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일
- REST 네트워크 상에서 Client와 Server 사이의 통식 방식중 하나
- HTTP URI를 통해 자원을 명시, HTTP Method를 통하여 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미하며 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여함
REST 장단점
장점
- 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화해준다.
- Hypermedia API의 기본을 충실히 지키면서 범용성을 보장
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있음
단점
- 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 값이 왠지 더 어렵게 느낌
- 구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 있음 (PUT, DELETE 사용 X, pushState를 지원하지 않음)
REST 구성요소
- 자원(Resource) URI : 모든 자원에 고유한 ID가 존재하고, Server에 존재함, Client는 URI를 이용하여 자원을 지정하고 해당자원의 상태에 대한 조작을 Server에 요청함
- 행위(Verb) HTTP Method : GET, POST, PUT, DELETE, HEAD와 같은 메서드를 제공함
- 표현(Representation of Resource) : Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답을 보냄, REST에서 JSON, XML, TEXT, RSS등 여러 형태의 Representation으로 나타내어 질 수 있음
REST 특징
- Server-Client(서버-클라이언트 구조)
- Stateless(무상태)
- Cacheable(캐시 처리 가능)
- Layered System(계층화)
- Code-On-Demand(optional)
- Uniform Interface(인터페이스 일관성)
REST API의 정의
- REST 기반으로 서비스 API를 구현한 것
- 최근 대부분 REST API를 제공함
REST API의 특징
- 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있음
REST API 설계 기본 규칙
- URI는 정보의 자원을 표현해야함
- resource는 명사를 사용하며, 소문자 복수형을 사용하여 표현함
- URI에 HTTP Method가 들어가면 안되며, 행위에 대한 동사표현이 들어가면 안됨
- 슬래시 구분자는 계층 관계를 나타내는데 사용
- URI 마지막 문자로 슬래시를 포함하지 않음
- 하이픈(-) URI의 가독성을 높이는데 사용하며 밑줄(_)은 사용하지 않음
- URI 경로에는 소문자, 파일확장자는 URI에 포함하지 않음
- 리소스 간에는 연관 관계가 있는 경우
RESTful의 개념
- RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어
- REST 원리를 다르는 시스템은 RESTful이란 용어로 지칭함
RESTful의 목적
- 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것
- RESTFul API를 구현하는 근본적인 목적이 퍼포먼스 향상에 있는게 아니라, 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는게 주동기임
RESTful 하지 못한 경우
- POST로만 모두 처리하는 API
'NETWORK' 카테고리의 다른 글
[NETWORK] Socket.io / WebSocket (0) | 2021.11.03 |
---|---|
[NETWORK] GET / POST 메서드 비교 (0) | 2021.11.01 |
[NETWORK] CORS (0) | 2021.10.31 |
[NETWORK] 요청 응답 헤더 (0) | 2021.10.29 |
[NETWORK] HTTP / HTTPS (0) | 2021.10.28 |