Skip to content

GraphQL Resolver Functions

Sure, here's an example of how to use resolver functions in GraphQL:

Let's say you have a schema that defines a User type, with fields for id, name, and email. You want to fetch the data for each field from a different data source - id from a SQL database, name from a REST API, and email from a MongoDB database.

Here's how you could define resolver functions for each field:

type User {
  id: ID
  name: String
  email: String
}
 
type Query {
  user(id: ID!): User
}
 
type UserResolver {
  id: (parent, args, context) => {
    // Fetch the ID from a SQL database
    return db.query(`SELECT id FROM users WHERE id = ${args.id}`);
  },
  name: (parent, args, context) => {
    // Fetch the name from a REST API
    return fetch(`https://api.example.com/users/${parent.id}`)
      .then(res => res.json())
      .then(data => data.name);
  },
  email: (parent, args, context) => {
    // Fetch the email from a MongoDB database
    return mongo.db('users').collection('users')
      .findOne({ id: parent.id })
      .then(data => data.email);
  }
}
 
const resolvers = {
  Query: {
    user: (parent, args, context) => {
      // Call the UserResolver functions to fetch the data for each field
      return {
        id: UserResolver.id(parent, args, context),
        name: UserResolver.name(parent, args, context),
        email: UserResolver.email(parent, args, context)
      }
    }
  }
}
 
const schema = makeExecutableSchema({
  typeDefs: [typeDefs],
  resolvers: resolvers
});

In this example, we define a UserResolver object that contains resolver functions for each field in the User type. When a query is made for a User, the user resolver function is called, which in turn calls the resolver functions for each field in the UserResolver object. Each resolver function fetches the data from a different data source, and returns the result.

Note that in this example, we assume that the SQL database is available through a db object, the REST API is available through a fetch function, and the MongoDB database is available through a mongo object. In practice, you would need to replace these with the appropriate database connections for your application.

This is just a simple example, but resolver functions can be used for much more complex data fetching scenarios as well.