Facebook이 만든 쿼리 언어다
- API를 위한 쿼리 언어다
- 이미 존재하는 데이터로 쿼리를 수행하기 위한 런타임이다
- 정확하게 필요하는 데이터를 받는다 (예측 가능한 결과를 반환한다)
- 많은 데이터 및 리소스를 단 한번의 요청으로 받을 수 있다
- 명확한 타입 시스템이 있어서 가능한 것을 보고 에러를 명확하게 알아 볼 수 있다
- 단일 엔드포인트에서 데이터의 모든 기능에 접근 가능하다
- 엔드포인트가 아닌 타입과 필드로 구성되어 있다
- 버전 관리 없이 API를 업그레이드 할 수 있다
GraphQL vs REST API
GraphQL
- 클라이언트가 필요한 리소스를 요청한다.
- 단일 엔드포인트 : GraphQL 스키마에 따라 데이터가 다르다.
- 하나의 쿼리가 여러 리졸버를 호출하여 여러 리소스가 포함된 중첩 응답 구성.
REST
- 리소스 모양과 크기는 서버에 의해 결정된다.
- 다중 엔드토인트 : URL과 Method에 따라 접근할 수 있는 데이터가 다르다.
- 각 요청은 정확히 하나의 경로 처리 함수를 호출
장점
- GraphQL은 구체적인 데이터 요구 사항이 포함된 단일 쿼리로 요청가능 하다
사용자 / 게시물 / 팔로워 데이터를 받아오려면 :
query {
User(id: "123") {
name
posts { title }
followers { name}
}
}
- Overfetching과 Underfetching이 없다
- 프론트엔드에서 신속한 iteration을 돌릴 수 있다
- 백엔드에서 프론트엔드 사이드에서 어떤 데이터를 사용할 수 있는지 알 수 있다
- 스키마 및 타입 시스템으로 인해 프론트/백엔드가 사용하는 데이터 구조를 맟출 수 있다
GraphQL을 왜 만들었는가?
- 같은 DB로 다양한 UI를 구상할 필요가 있어서
Facebook의 같은 홈 화면이어도 모바일 웹 / 모바일 앱(iOS, Android) / PC 웹 경우 각각 다른 UI로 화면을 구성할 필요가 있어서
- 보여주는 데이터가 제각각인 문제를 해소하기 위해서