REST API? RESTful API?
REST API와 RESTful API를 알기 전에 REST에 대해서 먼저 알아야 한다.
REST(Representational State Transfer)란?
REST는 웹 서비스를 위한 아키텍처 스타일로, 웹 기술과 HTTP 프로토콜을 기반으로 하는 상태 전달 모델을 의미한다.
우리는 REST를 통해 자원을 정의하고, 이러한 자원을 주고받는다.
REST의 주요 구성 요소
1. 자원(Resource) - REST에서 모든 정보는 자원으로 표현된다. 이 자원은 URI에 의해 고유하게 식별된다.
(예시 : "/user/1"과 같은 식으로 user를 나타낼 수 있다.)
2. 행위(Method) - REST는 자원에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행한다.
Create | POST |
Read | GET |
Update | PUT, PATCH |
Delete | DELETE |
3. 표현(Representation) - 클라이언트와 서버가 데이터를 주고받는 형태를 의미한다. JSON, XML 등의 형태가 된다.
REST의 특징
다음은 REST 아키텍처에 적용되는 제한 조건이기 때문에 REST의 특징이 될 수 있다.
1. Stateless : 각 요청 간에 클라이언트의 상태를 저장하지 않는다. 즉, 각각의 요청은 독립적으로 진행된다.
2. Client-Server : 클라이언트와 서버 각각의 역할이 확실히 구분된다. 클라이언트는 사용자 인터페이스와 사용자 인터렉션에, 서버는 데이터 관리와 서버 로직에 초점을 둔다.
3. Cacheable : REST는 기존 웹 표준을 그대로 사용하기 때문에 웹에서 사용하던 기존 인프라를 활용할 수 있다. 대표적으로 캐싱 기능이다. 서버의 응답이 캐시 될 수 있고, 클라이언트는 서버의 응답을 캐시에 저장할 수 있다.
4. Layered System : 서버는 다중 계층으로 구성될 수 있다. 그렇기에 클라이언트는 서버와 직접 통신하는지, 혹은 중간 서버와 통신하는지를 알 수 없다.
5. Uniform Interface : 일관적인 인터페이스로 분리되어 있다. 모든 자원이 고유한 URI를 가지며, 동일한 방식으로 접근한다.
REST API란?
REST API는 REST의 특징을 기반으로 하는, REST 아키텍처 스타일을 따르는 API를 말한다.
(API는 하나의 소프트웨어가 다른 소프트웨어와 데이터를 주고받기 위한 방법들을 제공하는 것이다.)
즉, 클라이언트와 서버가 서로 데이터를 주고받을 때, REST 규칙을 따르는 것이다.
(아직 들어본 적은 없지만 REST 규칙을 따르지 않고 다른 규칙을 따르는 API도 존재한다. 예를 들면 SOAP API, GraphQL API 등이 존재한다.)
REST API의 설계 규칙
REST API를 설계할 때 여러 규칙이 있다.
1. URI는 자원을 표현해야 한다.
이때, 동사가 아닌 명사를 통해 URI를 설정해야 한다.
예를 들어, "/getusers"나 "/createuser"가 아닌 그냥 "/users"나 "/user"가 되어야 한다.
2. 동사, 즉 행위에 대한 표현은 HTTP 메소드를 통해 나타낸다.
예를 들어 "/getusers"는 URI를 "/users"로 설정하고 HTTP 메소드를 GET 방식으로 설정한다.
"/createuser"는 URI를 "/user"로 설정하고 HTTP 메소드를 POST 방식으로 설정한다.
3. 슬래시(/)로 계층 관계를 표현한다.
예를 들어 URI를 "/users/12/memo"라고 설정하면
이는 "12번 사용자의 메모"를 나타낸다.
4. 마지막엔 슬래시를 사용하지 않는다.
5. 소문자를 사용한다.
대문자와 소문자를 구별하기 때문에, 일관성을 유지하기 위해 소문자를 사용한다.
6. 하이픈(-)을 사용하는 것은 가독성을 높일 수 있다.
7. 상태를 나타내는 표현은 따로 뺀다.
예를 들어 "/users/12/opened" 대신에 "/users/12?status=opened"로 사용하거나 body에 포함시킨다.
8. 컬렉션과 문서를 나타내는 단어는 복수로 표현한다.
예를 들어 사용자들을 모아놓은 컬렉션이면 "/user"보다는 "users"를 사용한다.
9. HTTP 응답 상태 코드를 사용하여 API의 상태를 표현한다.
HTTP 상태 코드는 https://duyaan.tistory.com/64를 참고하면 된다.
RESTful API
그러면 RESTful API는 REST API와 어떻게 다른 걸까?
REST API를 설명한 문장을 보면 다음과 같다.
"REST 아키텍처 스타일을 따르는 API를 말한다."
REST 아키텍처 스타일을 따르는 API이기 때문에 REST API라고 불린다.
하지만 이 말을 조금 바꿔서 생각하면
"REST의 원칙을 완전히 준수해야 한다는 것은 아니다."가 될 수 있다.
즉, 일부 REST API는 REST 원칙을 완전히 준수하지 않을 수 있다.
그러면 이제 RESTful API를 설명할 수 있다.
RESTful API는 REST 원칙을 완전히 준수하는 API를 뜻한다.
Stateless, Cacheable, Layered System 등의 REST 주요 특징/원칙을 모두 충족하는 경우에만 해당된다.
결국 REST API가 더 큰 범위라고 생각하면 된다.
모든 RESTful API는 REST API가 될 수 있고,
어떤 REST API는 RESTful API가 될 수 없다.
글 내용 중, 잘못됐거나 더 알아야 하는 지식이 있다면 댓글로 남겨주시면 감사하겠습니다!
모두 좋은 하루 보내세요:)