[네트워크] REST API vs. GraphQL API

cabbage·2023년 1월 12일
0

네트워크

목록 보기
9/10

API

API란 클라이언트가 HTTP 요청을 서버에 보냈을 때 실행되는 백엔드의 함수이다.

클라이언트가 게시물 데이터 저장, 게시물 데이터 수정, 프로필 데이터 저장, 프로필 데이터 수정 등의 요청을 서버에 보내면, 서버는 이러한 각각의 요청에 해당하는 담당 함수로 요청을 처리합니다. 이런 각각의 기능을 API라고 한다.

API는 기능, 즉 함수이므로 인자를 전달받고 데이터를 return한다.

  • 클라이언트에서 서버에 무언가를 요청할 때 보내는 데이터는 API에 전달되는 인자이다.
  • 서버가 클라이언트에게 응답할 때 건네주는 데이터는 API가 응답하는 데이터이다.

클라이언트의 요청과 서버의 응답은 HTTP를 사용하므로 HTTP 메시지에 데이터를 실어 보낸다.

REST API

API의 종류에는 크게 REST APIGraphQL API 두 가지가 있다.

REST API(RESTful API라고도 함)는 REST 아키텍쳐 스타일의 제약을 준수하는 API이다.
REST API를 사용하면 RESTful한 웹 서비스와 상호 작용할 수 있다.

REST API의 특징

  1. REST API는 API 이름마치 웹페이지의 주소처럼 생겼다.

  2. REST API를 사용하는 경우 REST API를 사용한 요청에 서버가 응답해 백엔드 API가 응답 결과로 돌려주는 모든 데이터를 받아야 한다.

  • REST API 요청에 대한 응답 데이터의 용량이 커진다.
  • 제목, 작성자의 정보만 필요할 뿐인데도, 백엔드 API가 돌려주는 모든 데이터를 받아야 하기 때문이다.

GraphQL API

API를 위한 쿼리 언어
GraphQL은 API를 위한 쿼리 언어이며 기존 데이터로 쿼리를 수행하기 위한 런타임이다. GraphQL은 API에 있는 데이터에 대한 완벽하고 쉬운 설명을 제공하고, 클라이언트에게 필요한 것을 정확하게 요청할 수 있는 기능을 제공하며 시간이 지남에 따라 API를 쉽게 진화시키고 강력한 개발자 도구를 지원한다.

GraphQL APIGraphQL이라는 API 쿼리 언어를 사용하는 API라고 이해했다.

GraphQL API의 특징

  1. GraphQL API는 API 이름일반적인 함수와 같다.
    • board(1) - 1번 게시글 조회하기
    • profile("철수") - 철수 프로필 조회하기
  2. GraphQL API를 사용하면, GraphQL API를 사용한 요청에 서버가 응답해 백엔드 API가 돌려주는 데이터 중에서 필요한 데이터만 골라 받을 수 있다.

  • GraphQL API 방식의 요청은 필요한 데이터만 골라 받을 수 있는 장점이 있다.

API와 CRUD

APICRUD, 즉Create, Read, Update, Delete 방식으로 구분할 수 있다.

  • Create - 새로운 데이터를 생성하는 API
  • Read - 기존 데이터를 조회하는 API
  • Update - 기존 데이터를 수정하는 API
  • Delete - 기존 데이터를 삭제하는 API

CRUDREST APIGraphQL API 방식에 따라 다르게 사용된다.

  • REST API 방식은 CRUD 마다 모두 다른 메서드를 사용한다.
  • GraphQL API 방식은 MUTATIONQUERY 만 사용한다.
    • MUTATION - 데이터를 조작하는 Create, Update, Delete에서만 사용
    • QUERY - 데이터를 조회하는 Read에서만 사용

REST API vs. GraphQL API

REST APIGraphQL API의 차이점을 아래와 같이 정리할 수 있다.

  1. REST API의 API 이름은 웹페이지의 주소 같지만, GraphQL API의 API 이름은 일반적인 함수 같다.
  2. REST API는 백엔드 API가 돌려주는 모든 데이터를 돌려 받아야 하지만, GraphQL API는 필요한 데이터만 골라 받을 수 있다.
  3. REST APIGraphQL APICRUD 방식이 다르다.

참고

profile
캐비지 개발 블로그입니다. :)

0개의 댓글