API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 매커니즘이다. 우리가 휴대폰의 날씨 앱으로 날씨 정보를 받아올 때 등 많은 곳에서 사용된다.
REST는 Representational State Transfer의 줄임말이다. REST는 클라이언트가 서버 데이터에 액세스하는 데 사용할 수 있는 GET, PUT, DELETE 등의 함수 집합을 정의한다. 클라이언트와 서버는 HTTP를 사용하여 데이터를 교환한다.
GraphQL은 API용으로 특별히 개발된 쿼리 언어로서, 클라이언트에게 요청한 데이터만 제공하는 것을 우선으로 한다. 또한 API를 빠르고 유연하며 개발자 친화적으로 만들도록 설계되었다.
클라이언트 애플리케이션에 필요한 정보를 얻기 위해 Rest를 사용하는 동안 여러 번 왕복을 해야한다.
특정 단계에서 불필요한 정보를 얻게 되는 경우가 많다. 따라서 과도한 정보를 가져오는 경우가 발생한다.
Graphql의 경우 특별히 요청된 응답을 제공한다. 따라서 여러 번의 왕복을 할 필요가 없고 데이터를 과도하게 가져오는 경우도 없다.
File 또는 이미지 등 Text만으로 하기 힘든 내용들을 처리하기 복잡하다.
고정된 요청과 응답만 필요할 경우에는 Query 로 인해 요청의 크기가 Rest보다 커진다
재귀적인 Query가 불가능하다
Rest
HTTP 와 HTTPs 에 의한 Caching 을 잘 사용하고 싶을 때
File 전송 등 단순한 Text 로 처리되지 않는 요청들이 있을 때
요청의 구조가 정해져 있을 때
Graphql
서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 때
대부분의 요청이 CRUD(Create-Read-Update-Delete) 에 해당할 때
GraphQL과 RESTful API
API란 무엇인가
GraphQL vs. REST: What You Didn’t Know