from 기술면접
(Network) REST API란
REST API 는
HTTP를 활용하여 데이터를 주고 받는 하나의 API 패턴
- 특징
- 통일되고 한정적인 인터페이스(URI)를 사용하도록 함
- API 메세지만 보고도 어떤 데이터 통신을 하는 지 누구나 쉽게 이해하도록 함
- 사용방법
- 정보의 자원을 URI로 표현
- 모든 자원에 대한 고유한 ID(
'/users/:userId'
)가 존재하고, server에 정의되어 있다. - 자원에 대한 행위로 HTTP Method 사용
- 설계규칙
- 리소스는 명사로 사용
- 단수와 복수데이터 구분
- 소문자와 하이픈 사용 (대문자,카멜케이스, 밑줄 사용 x)
- 마지막 문자 슬래시 사용하지 않음
- 장점
- HTTP 표준 프로토콜로 모든 플랫폼에서 사용가능
- 누구나 쉽게 의도하는 바를 파악가능
- 서버와 클라이언트 구분 명확 (자원을요청하는쪽 / 자원이있는쪽)
- 단점
- 표준이 존재하지 않는다
- HTTP 메소드 제한적
1. REST(REpresentationsal State Transfer)는 무엇인가요?
전반적인 웹 어플리케이션에서 상호작용하는데 사용되는 웹 아키텍처 모델입니다. 즉, 자원을 주고받는 웹 상에서의 통신 체계에 있어서 범용적인 스타일을 규정한 아키텍처라고 할 수 있습니다.
2. REST의 장점과 단점은 무엇인가요?
장점
- !클라이언트 / 서버 구조 : 각각의 역할이 확실하게 구분되고 일괄적인 인터페이스로 분리되어 작동하기 때문에 서로 간 의존성이 줄어든다.
- 무상태성 : 서버에서 어떤 작업을 하기 위해 상태 정보를 기억할 필요가 없고 들어온 요청에 대해 처리만 해주기 때문에 구현이 쉽고 단순해진다.
- 캐시 처리 가능 : 캐시 사용을 통해 응답시간이 빨라진다.
- !자체 표현성 : JSON을 이용한 메시지 포멧을 이용하여 직관적으로 이해할 수 있고 REST API 메시지 만으로도 어떤 행위를 하는지 알 수 있다.
- 계층화 구조 : 클라이언트와 서버가 분리되어 있기 때문에 중간에 프록시 서버, 암호화 게층 등 중간 매체를 사용할 수 있다.
- !멀티 플랫폼 사용에 적합
단점
- point-to-point 통신 모델을 기본으로 하기 때문에 서버와 클라이언트가 연결을 맺고 상호작용해야하는 어플리케이션의 개발에는 적당하지 않다.
??
- HTTP는 URI, HTTP에 대한 내용만을 담고 있어서 보안과 통신규약 정책 같은 것은 전혀 다루지 않기 때문에 개발자가 알아서 설계하고 구현해야 한다. ⇒ 표준이 없어 짜는 사람마다 다르다.
3. 왜 RESTful라고 말하나요?
- !멀티 플랫폼에 대한 지원에 유용하고 HTTP 프로토콜을 준수하므로 프로토콜을 지원하는 어던 언어면 모두 접근이 가능하기 때문입니다.
4. REST API의 일반적인 설계 규칙에 대해서 말해주세요.
- URI는 리소스를 표현해야 합니다.
- 리소스는 동사가 아닌 명사를 사용해야 한다.
- 리소스는 Collection과 Document로 표현할 수 있다.(Collection은 복수)
- 그 리소스에 대한 행위는 HTTP의 method로 표현해야 합니다.
- 그 외 세부 규칙
- 슬래시 구분자 ( / )는 계층 관계를 나타내는데 사용한다.
- URI 마지막 문자로 슬래시 ( / )를 포함하지 않는다.
- 하이픈 ( - )은 URI 가독성을 높이는데 사용한다.
- 대문자, 카멜케이스, 언더바(_) 사용은 지양한다.
5. graphQL을 이용한 API 방식과 비교하여 REST API를 설명해주세요.
- GraphQL API는 주로 전체 API를 위해서 하나의 endpoint를 사용하지만 RestAPI는 리소스마다 하나의 endpoint를 가지고 그 endpoint에서 그 리소스에 대한 모든 것을 담당합니다.
- GraphQL은 요청할 때 사용한 Query문에 따라 응답의 구조가 달라집니다.
- GraphQL은 원하는 정보대로 요청하는 것이 가능하지만 REST API는 응답의 형태가 정해져있고, 필요한 부분만 요청하는 것이 힘듭니다.
- RESTApi의 경우, 헤더에 다양한 Content-type을 사용하여 여러 형식의 데이터를 전송할 수 있으나, GraphQL은 Content-type이 applicaiton/json으로 제한되어 있어 파일 전송에 어려움이 있다.
- GraphQL은
과도한 데이터 요청(over-fetching)
방지할 수 있는 반면, RESTApi의 경우 데이터를 취사선택 할 수 없다는 문제가 있다.
- GraphQL은
부족한 데이터 요청(under-fetching
) 방지할 수 있지만, RESTApi의 경우 하나의 페이지에서 여러번 API 요청할 수 있다.