최근 면접을 보며 가장 많은 질문을 받았던 것이 REST API에 관한 질문이었다. REST API란 무엇인가?
먼저 REST는 무엇인가?
Representational State Transfar 를 줄여서 REST라고 부른다.
월드 와이드 웹, URI, HTTP 통신 등과 같은 통신 목적의 아키텍처의 형식이다.
자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고받는 모든 것을 의미한다.
- 자원(resource)의 표현(representation)
- 자원 : 소프트웨어가 관리하는 모든 것, 즉 정보! (문서, 영상, 그림, 데이터 등)
- 표현 : 정보를 표현하고, 식별하기 위한 이름.
- 그럼 자원의 전달은 어떻게 이루어 질까? (정보 전달)
- 데이터가 요청되어지는 시점에서 자원의 상태를(정보)를 전달한다.
- JSON, XML을 통해 데이터를 주고받는 것이 일반적이다.
- REST의 구체적인 개념
- HTTP URI를 통해 자원(Resource)를 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용한 아키텍처 스타일이다.
단, REST라는 개념은 아래의 조건을 만족해야 한다.
- 일관된 인터페이스 사용 (Uniform intreface)
- URI사용, HTTP 메서드 사용, RPC 미호출 등의 지정된 인터페이스를 준수한다.
- 클라이언트 / 서버
- 클라이언트는 서버에 요청(request)메시지를 전송하고, 서버는 요청에 대한 응답(response)메시지를 전송한다.
- 비연결성(Statelessness)
- 세션 등 이전 상황(문맥) 없이도 통신할 수 있다.
- 캐시 가능 (Cacheable)
- 서버의 응답 메시지는 캐싱(저장 후 재사용)될 수 있다.
- 계층화된 시스템(Layered system)
- 계층별로 기능이 분리된다. 그러므로 중간 계층의 기능(로드 밸런싱, 서버 증설, 인증 시스템 도입 등)이 변경되어도 통신에 영향을 주지 않는다.
- 주문형 코드 (code on demand)
- 손쉬운 데이터 처리를 위해 서버는 클라이언트에서 실행될 스크립트를 전송할 수 있다.
REST API란?
너무나도 당연하겠지만, REST 기반으로 서비스를 구현한 것이 REST API 이다.
- REST API의 설계 기본 규칙에 대해 알아보자.
(참고 리소스 원형 : 도큐먼트(객체 인스턴스나 데이터베이스 레코드와 유사한 개념), 컬렉션(서버에서 관리하는 디렉터리라는 리소스), 스토어(클라이언트에서 관리하는 리소스 저장소))
- URI는 정보의 자원을 표현해야 한다.
: resource는 동사보다는 명사를, 대문자보다는 소문자를 사용해야 한다.
: resource의 도큐먼트 이름으로는 단수 명사를 사용해야 한다.
: resource의 컬렉션 이름으로는 복수 명사를 사용해야 한다.
: resource의 스토어 이름으로는 복수 명사를 사용해야 한다.
: ex) GET : /members/1
- 자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE 등)로 표현한다.
: URI에 HTTP Method가 들어가면 안 된다. ex) GET : /members/delete/1 (X) DELETE /members/1
: URI에 행위에 대한 동사 표현이 들어가면 안 된다. 즉, CRUD 기능을 나타내는 것은 URI에 사용하지 않는다. ex) GET /members/get/1
: 경로 부분 중 변하는 부분은 유일한 값으로 대체한다. ex) id = 12인 student 삭제하는 route - DELETE /students/12
- REST API의 설계 규칙에 대해 알아보자.
- 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.
- URI 마지막 문자로 슬래시를 포함하지 않는다.
- 하이픈은 URI의 가독성을 높이는데 사용한다. (불가피하게 긴 URI경로를 사용하게 된다면 하이픈을 사용해 가독성을 높인다.)
- 밑줄(_)은 URI에 사용하지 않는다.
- URI 경로에는 소문자가 적합하다.
- URI 경로에 대문자 사용은 피하도록 한다.
- RFC 3986(URI 문법 형식)은 URI 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문
- 파일확장자는 URI에 포함하지 않는다.
- 리소스 간에는 연간 관계가 있는 경우
- /리소스명/리소스ID/관계가 있는 다른 리소스명
- ex) GET : /users/{userid}/devices
그렇다면 RESTful하다? RESTful은 무엇일까?
RESTful은 REST API를 제공하는 웹 서비스를 RESTful 하다고 표현한다.
- RESTful의 목적은?
- 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것.
- RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기
즉, REST란? 통신 목적의 아키텍처의 한 형식이며, 자원을 이름으로 구분하여 자원의 정보를 주고 받는 것.
REST API란? REST 기반으로 API를 구현한 것. (너무나도 당연) 데이터의 집합을 제공한다.
RESTful이란? REST API를 제공하는 웹 서비스를 RESTful하다고 할 수 있다.
출처: https://hahahoho5915.tistory.com/54 [넌 잘하고 있어:티스토리]
출처: https://www.youtube.com/watch?v=SlZwegFgVe4 [REST, RESTful, REST API가 뭔지 요약해드림:유튜브, 취미로 해킹]