[DRF] REST API란?

REST 아키텍처 스타일을 따르는 API를 REST API라고 한다. REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 한다. RESTful API라는 용어는 일반적으로 RESTful 웹 API를 나타냅니다. 하지만 REST API와 RESTful API라는 용어는 같은 의미로 사용할 수 있습니다.
1️⃣ REST ?
"REpresentational State Transfer" : 자원(resource)의 표현(representation)에 의한 상태 전달
즉, 자원을 이름으로 구분해 해당 자원의 상태를 주고 받는 모든 것을 의미
위키백과에서는 REST를 "웹 상의 자료를 HTTP위에서 SOAP이나 쿠키를 통한 세션 트랙킹 같은 별도의 전송 계층 없이 전송하기 위한 아주 간단한 인터페이스를 말한다. " 라고 정의하고 있는데, 아래 표에서 보듯 다른 API방식에 비해 간단하게 동작하는 것을 알 수 있다.
API 동작 방식 | |
SOAP API | 클라이언트와 서버는 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환 |
RPC API | 별도의 원격 제어 없이 서버에서 함수나 프로시저를 실행하여 클라이언트로 출력을 다시 전송하여 통신 |
websocket API | JSON 객체를 사용해 데이터를 전달하며 클라이언트와 서버 간에 양방향 통신 지원 |
REST API | 클라이언트가 서버에 요청을 데이터로 전송하고 서버가 처리하여 클라이언트에 리턴 |
# REST 과정
① 클라이언트 웹브라우저, 주소(URL) 입력
② 웹브라우저가 주소(URL)를 이용해 HTTP request 메시지 전송
③ 웹 서버는 주소(URL)와 매핑된 서버 내 문서나 프로그램을 찾아 작업(CRUD) 처리
④ 처리 후에 웹서버에서는 HTTP response 메시지를 클라이언트 웹브라우저로 전송.
⑤ 클라이언트 웹브라우저는 받은 메시지를 웹브라우저에 맞게 변환해서 표시
REST API의 통신 과정을 통해 REST의 정의를 다시 해보면, REST에 대한 이해가 확실히 된다.
✔ HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
✔ HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
✔ 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미
REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에, CRUD작업에서 HTTP의 메소드를 그대로 사용한다. 그렇기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이라 할 수 있다
HTTP Method | CRUD (REST Method) |
POST | create |
GET | read |
PUT | update |
PATCH | (partial) update |
DELETE | delete |
# REST 구성과 설계 규칙
◼ 자원(resource) : HTTP URI
- 동사보다는 명사, 대문자보다는 소문자
- 마지막에 ' / '를 넣지 않음
- 언더바( _ ) 대신 하이픈( - ) 사용
- 파일확장자 및 행위를 포함하지 않음
◼ 행위(verb) : HTTP Method
◼ 표현(representation) : JSON, XML 등
2️⃣ REST 특징
1. 서버-클라이언트 구조
서버와 클라이언트의 각각의 역할이 확실히 구분되기 때문에 서로 간 의존성이 줄어든다
2. 균일한 인터페이스
균일한 인터페이스는 클라이언트와 서버가 주고 받는 자원(resource)의 표현(representation) 형식이 달라도 서버가 표준 형식으로 정보를 전송함을 나타내는데, 모든 RESTful 웹 서비스 디자인의 기본이다. HTTP표준에만 따르면 플랫폼의 종류나 특정 언어, 기술에 종속 되지 않고 사용할 수 있다.
# 균일한 인터페이스를 위한 4가지 아키텍처 제약 조건
1. 요청은 리소스를 식별해야 합니다. 이를 위해 균일한 리소스 식별자를 사용합니다
2. 클라이언트는 원하는 경우 리소스를 수정하거나 삭제하기에 충분한 정보를 리소스 표현에서 가지고 있습니다. 서버는 리소스를 자세히 설명하는 메타데이터를 전송하여 이 조건을 충족합니다.
3. 클라이언트는 표현을 추가로 처리하는 방법에 대한 정보를 수신합니다. 이를 위해 서버는 클라이언트가 리소스를 적절하게 사용할 수 있는 방법에 대한 메타데이터가 포함된 명확한 메시지를 전송합니다.
4. 클라이언트는 작업을 완료하는 데 필요한 다른 모든 관련 리소스에 대한 정보를 수신합니다. 이를 위해 서버는 클라이언트가 더 많은 리소스를 동적으로 검색할 수 있도록 표현에 하이퍼링크를 넣어 전송합니다.
3. 무상태
무상태는 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법으로, 서버가 클라이언트의 요청 정보를 따로 저장하고 관리하지 않기 때문에 서버는 들어오는 요청만 처리하기만 하면 된다
4. 계층화 시스템
계층화된 시스템에서 클라이언트는 클라이언트-서버 사이에 프록시와 게이트웨이 같은 네트워크 기반의 중간 매체에 연결할 수 있고, 서버는 요청을 다른 서버로 전달할 수도 있다. 클라이언트 요청을 수행하기 위해 함께 작동하는 보안, 애플리케이션 및 비즈니스 로직과 같은 여러 계층으로 여러 서버에서 실행되도록 설계하여 구조상에 유연성을 둘 수 있다. 이러한 계층은 클라이언트에 보이지 않는 상태로 유지된다.
5. 캐시 가능성
RESTful 웹 서비스는 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 서버 응답 시간을 개선하기 위해 클라이언트에 일부 응답을 저장하는 프로세스인 캐싱 기능을 적용할 수 있다.
6. 온디맨드 코드
REST 아키텍처 스타일에서 서버는 소프트웨어 프로그래밍 코드를 클라이언트에 전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정할 수 있다.
3️⃣ REST 이점
◼ 클라이언트와 서버의 상호 작용을 최적화하기 때문에 효율적으로 시스템 크기 조정할 수 있고, REST의 특징 중 하나인 무상태로 인해 서버 로드가 필요없다. 또한 캐싱 기능이 일부 클라이언트와 서버의 상호 작용을 부분 혹은 완전 제거하기 때문에 확장성과 재사용성을 높힐 수 있다.
◼ 클라이언트와 서버가 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리하여 유연성을 향상시키며 유지 보수 및 운영에 편리하다.
◼ 사용되는 기술과 독립적이기 때문에 API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트와 서버 애플리케이션을 작성할 수 있다.
◼ HTTP의 인프라를 사용하기 때문에 별도의 인프라를 구축하지 않아도 되고, HTTP 프로토콜을 따르는 모든 플랫폼에서 사용가능하다.
<참고>
- https://aws.amazon.com/ko/what-is/restful-api/
- https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80
- https://blog.naver.com/sw_maestro/222930071929