GraphQL Federation — GraphQL

GraphQL Federation Di microservices, setiap service punya schema sendiri. Federation menggabungkan multiple schema menjadi satu unified graph yang client…

GraphQL Federation

Di microservices, setiap service punya schema sendiri. Federation menggabungkan multiple schema menjadi satu unified graph yang client akses via satu endpoint.

Architecture

Client → Gateway (Router)
           ├── User Service (User schema)
           ├── Post Service (Post schema)
           └── Comment Service (Comment schema)

# Client melihat satu schema unified
# Gateway routes queries ke service yang tepat

Subgraph Schemas

# User Service
type User @key(fields: "id") {
  id: ID!
  name: String!
  email: String!
}

type Query {
  user(id: ID!): User
  me: User
}

# Post Service
type Post @key(fields: "id") {
  id: ID!
  title: String!
  content: String!
  author: User! # Reference ke User dari service lain
}

# Extend User dari service lain
extend type User @key(fields: "id") {
  id: ID! @external
  posts: [Post!]!  # Field baru yang di-resolve di Post Service
}

@key Directive

Menandakan entity yang bisa di-reference antar subgraph. Gateway menggunakan key untuk "stitch" data.

Reference Resolver

// Post Service harus bisa resolve User reference
const resolvers = {
  User: {
    __resolveReference: (reference) => {
      // reference = { id: "123" }
      // Return user posts
      return { id: reference.id };
    },
    posts: (user) => {
      return db.posts.findMany({ where: { authorId: user.id } });
    },
  },
};

Tools

Yang akan kamu pelajari