REST 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스
API를 위한 쿼리 언어
CRUD 메소드를 활용한 동작이해가 쉽다
(REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악)
클라이언트와 서버간의 각자의 역할이 명확하게 분리 (사이에서 역할 처리)
- overFetching - 불필요한 data를 너무 많이 받아와 낭비가 심하고 이로인한 성능저하
- underFetching - 어떤 하나의 api에서 받아온 내용으로는 부족하여 다른 api를 호출하는 상황이 발생하여 원하는 data 내용보다 적게 받아와 이를 추가적인 api 호출이 필요
- overFetching 해결 - 필요한 속성 부분들만 지정해서 받아올 수 있다.
- underFetching 해결 - 한번의 API 호출에서 필요한 원하는 데이터 얻기 가능
HTTP의 캐싱 전략은 각각의 URL에 저마다의 정책을 설정하는 형식으로 이루어집니다. REST API 역시 URL마다 개별적인 데이터를 제공하게끔 하므로, HTTP에서 제공하는 캐싱 전략을 그대로 사용하는 것이 가능합니다. 반면 GraphQL은 (주로) /graphql 이라는 하나의 URL을 두고 여기에 쿼리를 전송, 응답을 받는 형식입니다.
그렇기에 모든 데이터를 하나의 URL에서 처리하는 GraphQL은 HTTP에서 제공하는 캐싱 전략을 그대로 사용할 수 없습니다.
웹 사이트와 애플리케이션의 성능은 이전에 가져온 리소스들을 재사용함으로써 현저하게 향상
HTTP 캐시들은 일반적으로 GET에 대한 응답만을 캐싱하며, 다른 메서드들은 제외될 겁니다. 라고 MDN에서 설명하고있다.