Slide 72
Slide 72 text
type User {
id: ID!
name: String!
}
func (r *UserResolver) ID() (graphql.ID, error) {
user, err := r.loadFn()
if err != nil {
return graphql.ID(""), err
}
if user == nil {
return graphql.ID(""), errors.New("not found")
}
return graphql.ID(user.ID), nil
}
func (r *UserResolver) Name() (string, error) {
user, err := r.loadFn()
if err != nil {
return "", err
}
if user == nil {
return "", errors.New("not found")
}
return user.Name, nil
}
type UserResolver struct {
loadFn *dataloader.Thunk
}
Right now we're at the point where we can just about generate everything in simple resolvers like this except for the part where you need to know what the service's data
looks like.
My hope is that we can convince teams to go beyond their REST JSON APIs and adopt some kind of IDL of their own.
Then, we could generate all resolver code just by knowing the mapping of GraphQL schema IDL to backend service IDL.