우리는 API를 만들면서 또는 CS를 공부하면서 REST API에 대해 자주 접한다. REST API란 대충은 얼버무릴 수 있지만 정확하게 먼지는 쉽게 설명하기 어렵다. REST API가 뭔지에 대해 이번 posting을 통해서 알아보자!
REST란 Representational State Transfer의 약자로 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다.
이렇게 위의 정의만으로는 쉽게 알아먹기 힘들다. 쉽게 풀어써 보면, 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 것을 의미한다. 이것도 좀 어려운가?
다시 말해, REST는 HTTP URL을 통해 자원(쉽게 말해 주소)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD(CREATE, READ, UPDATE, DELETE) 오퍼레이션을 적용하는 것이라고 할 수 있겠다.
REST를 구성하는 요소에는 크게 3가지가 있다.
- URI - 정보의 자원을 표현
- HTTP method - 자원의 operation에 대한 표현
ex) GET / POST / PUT / DELETE- 자원의 표현 - server에서의 응답
URI는 정보의 자원을 표현해야 한다. 자원의 형태는 명사를 사용한다.
아래는 잘못된 예시와 올바를 예시를 나타내었다.
URI에는 자원에 대해서만 나타나야 하므로 delete와 같은 operation에 대한 단어가 들어가면 안된다.
잘못된 예시 : GET /student/delete/1 올바른 예시 : DELETE /student/1
❗️ URI setting 시 주의 할 점
1) '/'는 계층을 구분할 때 사용한다.
2) URI 마지막 문자로 '/' 포함하지 않는다.
3) '-'(하이픈)은 가독성을 높이기 위해 사용한다.
4) 언더 바('_') URI에 넣지 않는다.
5) URI 경로에는 소문자만 사용된다.
6) URI 경로에 파일확장자는 포함시키지 않는다.
해당 조건 들을 준수하면 개별 컴포넌트는 자유롭게 구현할 수 있다.
Interface의 일관성
일관적인 interface로 분리되어 있어야 한다.
Stateless
각 요청 간 클라이언트의 context(상태 정보)가 서버에 저장되어서는 안 된다.
Cache 가능
REST의 가장 큰 특징 중 하나라고 한다. REST는 웹 표준인 HTTP를 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 사용할 수 있다. 따라서 HTTP가 가진 캐싱 기능을 적용할 수 있는데, HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag 등을 이용하면 쉽게 구현이 가능하다고 한다.
계층형 구조
REST 서버는 다중 계층으로 구성될 수 있으며, 보안, 로드 밸런싱, 암호화 계층 등을 추가해 구조상의 유연성을 둘 수 있고, PROXY, 게이트웨이와 같은 네트워크 기반의 중간매체를 사용할 수 있다.
Client-Server 구조
REST 서버는 API 제공, Client는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 되어있어 Server와 Client의 역할이 명확히 나뉘기 때문에 각 필드에서 개발해야할 점이 명확해지고 서로 간의 의존성이 줄어들게 된다.
Self-descriptiveness(자체 표현 구조)
REST API만 보고도 쉽게 알 수 있다. 즉 HTTP method와 URI만 보고도 어떤 operation을 하는지 목적을 쉽게 알 수 있다.
API는 Applicationo Programming Interface의 약자로, 응용 프로그램(애플리케이션)에서 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.
즉, 애플리케이션과 운영체제 그리고 애플리케이션과 프로그래밍 언어가 제공하는 기능 사이의 '상호 작용'을 도와줍니다.
ex) 리모컨 역할 - 우리가 TV를 켜거나 에어컨을 킬 때 중간에서 작용을 도와주는 역할
REST API guide를 따라서 API를 작성하여 Web sevice할 때 그 API를 RESTful API라 한다.
📖 출처 :
이번 posting을 하며 RESTful API에 대해 정확하게 짚어 볼 수 있었다. 이번 posting을 통해 정확한 의미를 알았으므로 RESTful API를 잘 따르고 있었는 지 한번 되짚어 봐야겠다!