Basic Example
In this example, we’ll stitch together two very simple schemas representing a system of users and posts. You can find more examples and use-cases in the Handbook
import { makeExecutableSchema } from '@graphql-tools/schema'
import { stitchSchemas } from '@graphql-tools/stitch'
let postsSchema = makeExecutableSchema({
typeDefs: /* GraphQL */ `
type Post {
id: ID!
text: String
userId: ID!
}
type Query {
postById(id: ID!): Post
postsByUserId(userId: ID!): [Post]!
}
`,
resolvers: {
// ...
}
})
let usersSchema = makeExecutableSchema({
typeDefs: /* GraphQL */ `
type User {
id: ID!
email: String
}
type Query {
userById(id: ID!): User
}
`,
resolvers: {
// ...
}
})
// setup subschema configurations
export const postsSubschema = { schema: postsSchema }
export const usersSubschema = { schema: usersSchema }
// build the combined schema
export const gatewaySchema = stitchSchemas({
subschemas: [postsSubschema, usersSubschema]
})
This process builds two GraphQL schemas, places them each into subschema configuration wrappers
(discussed below), and then passes the subschemas to stitchSchemas
to produce one combined schema
with the following root fields:
type Query {
postById(id: ID!): Post
postsByUserId(userId: ID!): [Post]!
userById(id: ID!): User
}
We now have a single gateway schema that allows data from either subschema to be requested in the same query.