REST API의 한계
예제를 통해 REST API의 한계에 대해 알아보자!
- 가상의 블로그 앱을 구현한다고 가정
- 위와 같은 화면을 구현하기 위해선 다음의 데이터가 필요
→ 사용자의 이름
→ 사용자의 포스팅 목록
→ 사용자의 팔로워 목록
REST API로 Blog 앱을 구현할 때
- Overfetch : 필요없는 데이터까지 제공함
→ 블로그 앱 예제 처럼 유저의 이름만 필요한 상황에서 REST API를 사용한다면, 응답 데이터는 유저의 주소, 생일 등과 같이 실제로는 클라이언트에게 필요없는 정보가 포함되어 있을 수 있음
- Underfetch : endpoint가 필요한 정보를 충분히 제공하지 못함
→ Underfetch의 경우 클라이언트는 필요한 정보를 모두 확보하기 위하여 추가적인 요청을 보내야만 함
→ 블로그 앱 예제 화면을 구현하기 위해선 유저 정보 뿐만 아니라 유저의 포스팅 목록 및 유저가 보유한 팔로워까지 필요함
→이 때 필요한 정보를 모두 가져오려면 REST API에서는 각가의 자원에 따라 엔드포인트를 구분하기 때문에 3가지 엔드포인트에 요청을 보내야 함
- 클라이언트 구조 변경 시 엔트포인트 변경 또는 데이터 수정이 필요함
→ REST API에서는 자원의 크기와 형태를 서버에서 결정하기 때문에 클라이언트가 직접 데이터 형태를 결정 할 수 없음!
→ 이로 인해 만약 클라이언트에서 필요한 데이터의 내용이 변할 경우 다른 endpoint를 통해 변경된 데이터를 가져오거나 수정해야 함
REST API와 GraphQL의 다른점
- REST API는 Resource에 대한 형태 정의와 데이터 요청 방법이 연결되어 있지만, GraphQL에 대해서는 Resource에 대한 형태 정의와 데이터 요청이 완전히 분리되어 있음
- REST API는 Resource의 크기와 형태를 서버에서 결정하지만, GraphQL에서는 Resource에 대한 정보만 정의하고 필요한 크기와 형태는 클라이언트 단에서 요청 시 결정 함
- REST API는 URI가 Resource를 나타내고 Method가 작업의 유형을 나타내지만, GraphQL에서는 GraphQL Schema가 Resource를 나타내고 Query, Mutation 타입이 작업의 유형을 나타냄
- REST API는 여러 Resource에서 접근하고자 할 때 여러 번의 요청이 필요하지만, GraphQL에서는 한번의 요청에서 여러 Resource에 접근할 수 있음
- REST API에서 각 요청은 해당 엔드 포인트에 정의된 핸들링 함수를 호출하여 작업을 처리하지만, GraphQL에서는 요청 받은 각 필드에 대한 resovler를 호출하여 작업을 처리함
GraphQL의 장단점
GraphQL로 Blog 앱을 구현할 때
- 하나의 endpoint 요청
→ /graphql이라는 하나의 endpoint를 요청으로 받고 그 요청에 따라 query,
'Network' 카테고리의 다른 글
[API] GraphQL 구조 (1) | 2023.01.30 |
---|---|
[API] GraphQL (0) | 2023.01.28 |
[HTTP] 특징 (0) | 2023.01.03 |
네트워크 계층 모델 - TCP/IP 4계층 모델 (0) | 2023.01.03 |
네트워크 계층 모델 - OSI 7계층 모델 (0) | 2023.01.03 |