GraphQL
은 서버에서 데이터를 가져오기 쉽게 만든 쿼리 언어이다. GraphQL
는 서버사이드에서 GraphQL
로 작성된 쿼리를 받아서 결과를 처리해서 클라이언트에게 응답하는 역할을 한다. 하나의
GraphQL
은 Query
와 Mutation
으로 나눠 요청을 개념적으로 분리하는데, Query
는 데이터를 읽는 행위를 말하고, Mutation
은 데이터를 변경하는 행위를 말한다.
API를 위한 쿼리 언어로, 타입과 필드를 정의해서 각 타입의 필드에 대한 함수로 구현된다. 예를 들어서 로그인한 사용자가 누구(me)인지/ 해당 사용자의 이름(name)을 가져오는 GraphQL은 다음과 같다.
type Query {
me: User
}
type User {
id: ID
name: String
}
이에 대한 응답은 다음과 같다
{
"me": {
"name": "홍길동"
}
}
{
hero {
name
}
}
위 쿼리를 실행하면 다음과 같은 결과를 얻을 수 있다
{
"data": {
"hero":{
"name": "iron man"
}
}
}
쿼리와 결과가 정확히 동일한 형태이고, 위 예제에서는 String
타입만 요청했지만, 필드는 다음 예제처럼 객체를 참조할 수도 있다.
{
hero {
name
friends {
name
}
}
}
{
"data": {
"hero": {
"name": "iron man"
"friends":[
{"name": "spider man"},
{"name": "hulk"},
{"name": "captain america"}
]
}
}
}
GraphQL
쿼리는 연관된 객체와 필드를 탐색할 수 있어서 여러번의 REST 요청으로 받아오는 데이터를 한번의 요청으로 가져올 수 있다.
GraphQL
의 스키마는 DB의 스키마와 같은 개념을 갖는다. 특정 요청이나 반환할 데이터 타입에 대한 정의를 할 수 있다.
REST API
는 URL
과 HTTP METHOD
를 사용해서 엔드포인트를 다양하게 가져가며 사용을 한다. 하지만, GraphQL
은 하나의 엔드포인트를 사용한다.
하나의 엔드포인트를 사용하며 데이터를 HTTP BODY
에 실어 보내기 때문에 모든 요청은 POST
로만 보내고 요청의 특징에 따라서 Query
와 Mutation
으로 구분된다.