Resolver GraphQL adalah: Fungsi dan Contoh — GraphQL

Resolver adalah fungsi yang menyediakan data untuk tiap field di schema GraphQL. Pelajari signature parent, args, context, info lewat contoh kode.

Resolvers

Resolver adalah fungsi yang menyediakan data untuk setiap field di schema. Saat client query sebuah field, resolver yang sesuai dipanggil.

Anatomy of a Resolver

// resolver(parent, args, context, info)
const resolvers = {
  Query: {
    user: async (parent, { id }, context) => {
      return context.db.users.findById(id);
    },
    users: async (parent, { limit, offset }, context) => {
      return context.db.users.findMany({ take: limit, skip: offset });
    },
  },

  Mutation: {
    createUser: async (parent, { input }, context) => {
      return context.db.users.create({ data: input });
    },
  },

  // Field-level resolver
  User: {
    posts: async (parent, args, context) => {
      // parent = user object dari parent resolver
      return context.db.posts.findMany({
        where: { authorId: parent.id },
      });
    },
    fullName: (parent) => {
      return `${parent.firstName} ${parent.lastName}`;
    },
  },
};

Resolver Arguments

Context Setup

// Server setup (Apollo Server)
const server = new ApolloServer({
  typeDefs,
  resolvers,
});

// Context per request
const { url } = await startStandaloneServer(server, {
  context: async ({ req }) => ({
    db: prisma,
    user: await getAuthUser(req.headers.authorization),
    loaders: createLoaders(), // DataLoader instances
  }),
});

Default Resolvers

// GraphQL punya default resolver: parent[fieldName]
// Jadi jika parent.name sudah ada, tidak perlu resolver untuk field "name"

// Hanya tulis resolver jika:
// 1. Field butuh custom logic (computed field)
// 2. Field butuh data dari sumber lain (database query)
// 3. Field butuh transformasi

Yang akan kamu pelajari