-
동기 / 비동기 모두 가능
-
유효성검사를 한 후, GraphQL 쿼리는 GraphQL 서버에서 실행되어, 요청된 쿼리와 똑같은 형태의 결과를 반환합니다. 일반적으로 JSON 형태입니다.
-
타입의 각 필드는 GraphQL 서버개발자가 만든 resolver 함수에 의해 실행됩니다. 필드가 실행되면 해당 resolver 가 호출되어 다음 값을 생성합니다.
-
하지만 필드가 객체를 반환하면 쿼리는 해당 객체에 적용되는 다른 필드들을 포함하게됩니다. 이는 스칼라 값에 도달할 때까지 반복됩니다.
- 최상위 타입: Root 타입 또는 Query 타입
resolver(obj, args, context, info) {}
- resolver 함수는 네 개의 인수를 받습니다.
- obj: 대부분 사용되지 않는 루트 Query 타입의 이전 객체.
- args: GraphQL 쿼리의 필드에 제공된 인수.
- context: 모든 resolver 함수에 전달되며, 현재 로그인한 사용자, 데이터베이스 액세스와 같은 중요한 문맥 정보를 보유하는 값.
- info: 현재 쿼리, 스키마 정보와 관련된 필드별 정보를 보유하는 값. 자세한 내용은 type GraphQLResolveInfo 참조.
Q) GraphQL은 Promises, Futures, Tasks 가 완료될 때까지 기다렸다가 효율적으로 동시에 처리합니다. -> 그럼 하나의 쿼리에 여러 비동기 요청을 보내게 되면, 해당 쿼리들이 다 완성되기 전까지는 늦게 response 받게 되겠군
type Query {
human(id: ID!): Human
}
type Human {
name: String
appearsIn: [Episode]
starships: [Starship]
}
enum Episode {
NEWHOPE
EMPIRE
JEDI
}
type Starship {
name: String
}
{
human(id: 1002) {
name
appearsIn
starships {
name
}
}
}