Just Do IT!
[네트워크] REST / REST API / RESTful 이란? 본문
728x90
반응형
REST란?
Representational State Transfer의 약자
자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다
자원(resource)의 표현(representation)에 의한 상태 전달
- 자원 : 해당 소프트웨어가 관리하는 모든 것
- 문서, 그림, 데이터, 해당 소프트웨어 자체 등
- 자원의 표현 : 그 자원을 표현하기 위한 이름
- DB의 이름이 자원일 때, 'name'을 자원의 표현으로 지정
REST의 정의
- HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
- HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미
- CRUD Operation
- Create : 데이터 생성(POST)
- Read : 데이터 조회(GET)
- Update : 데이터 수정(PUT, PATCH)
- Delete : 데이터 삭제(DELETE)
- 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여한다.
- CRUD Operation
REST의 구성 요소
- 자원(Resource) : HTTP URI
- 자원을 구별하는 ID
- client는 URI를 통해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 server에 요청한다
- 자원에 대한 행위(Verb) : HTTP Method
- HTTP 프로토콜의 Method를 사용한다
- HTTP 프로토콜은 GET, POST, PUT, DELETE와 같은 메서드를 제공한다
- 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load
- client가 자원의 상태(정보)에 대한 조작을 요청하면 server는 이에 적절한 응답(representation)을 보낸다
- REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형해의 representation으로 나타내어질 수도 있다
- 일반적으로 JSON 혹은 SML을 통해 데이터를 주고받는
REST의 특징
- Server-Client(서버-클라이언트 구조)
- 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 된다
- Stateless(무상태)
- Cacheable(캐시 처리 가능)
- Layered System(계층화)
- Uniform Interface(인터페이스 일관성)
REST의 장단점
장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없다.
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
- 서버와 클라이언트 역할을 명확하게 분리
단점
- 표준이 존재하지 않음
- 사용할 수 있는 메소드가 4가지(HTTP Method) 뿐
- 구형 브라우저(ex. 익스플로어)에서 아직 제대로 지원해주지 못하는 부분이 존재
- PUT, DELETE를 사용하지 못하는 점
REST API란?
API (Application Programming Interface)
- 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것
REST API
- REST 기반으로 서비스 API를 구현한 것
- OpenAPI(누구나 사용할 수 있는 공개된 API) 는 대부분 REST API를 제공
REST API 설계 기본 규칙
- URI는 정보의 자원을 표현해야 한다
- resource는 동사보다는 명사를, 대문자보다는 소문자를 사용한다
- resource의 도큐먼트 이름으로는 단수 명사를 사용해야 한다
- resource의 컬렉션 이름으로는 복수 명사를 사용해야 한다
- resource의 스토어 이름으로는 복수 명사를 사용해야 한다
- URI에 HTTML Method가 들어가면 안된다
- URI에 HTTML Method가 들어가면 안된다
- URI에 행위에 대한 동사 표현이 들어가면 안된다(CRUD 기능을 나타내는 것은 URI에 사용하지 않는다.)
- 경로 부분 중 변하는 부분은 유일한 값으로 대체한다(즉 :id는 하나의 특정 resource를 나타내는 고유값이다)
- 자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE) 로 표현한다.
- 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다
- URI 마지막 문자로 슬래시를 포함하지 않는다
- 하이픈(-) 은 URI 가독성을 높이는데 사용
- 밑줄(_)은 사용하지 않는다
- URI 경로에는 소문자가 적합
- 파일 확장자는 URI에 포함하지 않는다.
RESTful이란?
- 일반적으로 REST라는 아키텍쳐를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어
- REST API를 제공하는 웹 서비스를 'RESTful'하다고 할 수 있다
- REST를 REST 답게 쓰는 방법이다 (공식 x)
RESTful 하지 못한 경우
- CRUD 기능을 모두 POST 로만 처리하는 API
- route에 resource, id 외의 정보가 들어가는 경우
참고
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://velog.io/@seokkitdo/Network-REST%EB%9E%80-REST-API%EB%9E%80-RESTful%EC%9D%B4%EB%9E%80
728x90
'CS 정리' 카테고리의 다른 글
브라우저 저장소의 차이점 (local storage, session storage, cookie) (0) | 2023.03.31 |
---|---|
캐시(Cache)의 장단점 (0) | 2023.03.29 |
프레임워크(Framework)와 라이브러리(Library)의 차이 (0) | 2023.03.29 |
브라우저의 렌더링 과정 (0) | 2023.03.27 |
[Linux] window 환경에서 Linux 사용하기 (WSL) (0) | 2023.03.21 |