클라이언트가 필요한 데이터를 정확하게 특정하여 API에 요청하는 선언적인 데이터 불러오기를 가능하게 만드는 것이다. 고정된 형태의 데이터 구조를 반환하는 엔드포인트를 여러개 제공하는 것이 아니라 단 하나의 엔드포인트만을 노출시키고, 클라이언트가 요청한 데이터들만을 정확하게 반환한다.(필요한 데이터가 무엇인지 서버에 알려주기 위해서 클라이언트가 보다 많은 정보를 보내야 한다.)
GraphQL은 데이터베이스 관련 기술이 아닌 API를 위한 쿼리 언어이다. 데이터베이스의 종류와 상관 없이 작동하며, 효율적으로 사용될 수 있다.
모바일 사용의 증가로 인한 효율적인 데이터 로딩의 필요성을 위해서 네트워크 상에서 전송되어야 하는 데이터의 양을 최소화하고 어플리케이션의 퍼포먼스를 대체적으로 향상시켜준다.
REST API를 사용할 때는, 클라이언트측의 특정 요구사항이나 설계 변경에 대응하기 위하여 서버의 데이터를 노출시키는 방법을 변경해야 하는 경우가 종종 발생한다. 이로 인해 빠른 개발 및 제품 순환이 방해받게 된다.(오늘날의 클라이언트의 급변하는 요구사항들을 만족시키기에는 유연서이 부족하다.)
REST를 사용하면 필요한 데이터를 불러오기 위하여 엔드포인트를 여러번 요청해야하며 필요없는 정보까지 가져오게될 수 있는데(고정된 데이터 구조를 반환하기 때문에), GraphQL에서는 구체적인 데이터 요구사항을 포함한 딱 하나의 쿼리를 graphQL 서버에 보내게 되며 서버는 요구사항에 일치하는 json 객체를 반환해준다.(클라이언트에게 필요한 데이터를 쿼리에 정확히 특정해줄 수 있으며, 서버로부터 반환도니 데이터의 구조가 쿼리에 정의된 중첩 구조를 정확히 따른다.)
UI를 조금이라도 바꾸면 필요한 데이터가 변할수도 있기 때문에 그럴 경우 백엔드에서 대응해야 하는데, graphql을 사용하면 서버에서 추가로 작업하지 않더라도 클라이언트를 수정할 수 있다.