GraphQL Resolver Functions

Friday, March 17th 2023

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.