[git] Graphql 4 ( 데이터 Fetching )
데이터 Fetching
그래프 큐엘을 통해서 들어오는 query, mutation 등을 resolver와 매칭 시켜준다.
Resolver란 ?
스키마의 필드를 어떤 데이터로 채워서 반환해줄지 결정해주는 함수이다. 즉, “Resolver”는 식별자를 “해결” 해주는 역할을 한다.
const users = [{ ... }]
// schema
type Query {
users: [User!]!
}
// resolver
const resolvers = {
Query :{
users : () => return users;
}
}
위의 resolvers
라는 객체는 resolver map
이라고 부른다. 이 resolver map은 특정 스키마 타입 <-> 각각의 resolver를 매핑 시켜주는 역할을 하게 된다.
리졸버 체인
쿼리를 통해서 특정 타입을 가져올때, 해당 객체가 다른 객체를 참조하고 있을 수 있다. 간단하게 예를 들자면,
type Library {
branch: String!
books: [Book!]
}
type Book {
title: String!
author: Author!
}
type Author {
name: String!
}
type Query {
libraries: [Library]
}
도서관들에 대한 정보를 가져오기 위해서 쿼리를 날린다고 가정했을때, 해당 타입의 객체는 Book 객체를, 그리고 Book 객체는 Author객체를 참조하고 있다.
누군가 아래의 쿼리를 날린다고 가정을 해보자.
query {
libraries {
books {
author {
name
}
}
}
}
이때 리졸버의 동작이 연쇄적으로 chaining되기 때문에, resolver chiain이라고 부른다.
Query.libraries()
-> Library.books()
-> Book.author()
-> Author.name()
리졸버는 위의 체이닝이 연쇄적으로 일어나게 된다.
이것은.. 연관관계가 아닌가 싶은데…
리졸버 인자 (arguments)
각각의 리졸버 함수는 4개의 인자를 받을 수 있다.
(parent, args, context, info)
- parent - 리졸버 체인에서 이전의 리졸버의 반환 값.
- args - client가 쿼리나 뮤테이션에 어떤 인자를 넣어서 호출할 수 있는데, 이 인자를 받아 객체로 만든 것이 주입된다.
- context - 모든 리졸버 함수에서 공유되는 동작이다. 이는 constructor를 통해서 해당 context에 대한 정보를 설정할 수 있는데, http header의 Authorization 필드와 같은 값을 넣어줄 수 있다. 이렇게 넣어준 값은 리졸버 함수에서 사용할 수 있게 된다.
- info - ?
Default Resolvers
(parent, 스키마의 구현.
#그래퓨큐엘/apollo-server/fetch