Batching
Batching is the process of taking a group of requests, combining them into one, and making a single request with the same data that all of the other queries would have made. This is a way to reduce the number of requests that your application makes to the server.
The Batching functionality is described via the Batching RFC (opens in a new tab).
Enable Batching
Batching is disabled by default, but you can enable it by setting the batching option to true:
import { createYoga, createSchema } from 'graphql-yoga'
import { createServer } from 'node:http'
export const yoga = createYoga<ServerContext, UserContext>({
schema: createSchema({
typeDefs: /* GraphQL */ `
type Query {
hello: String!
}
`
}),
batching: false
})
const server = createServer(yoga)
server.listen(4000, () => {
console.info('Server is running on http://localhost:4000/graphql')
})curl -X POST -H 'Content-Type: application/json' http://localhost:4000/graphql \
-d '[{"query": "{ hee: hello }"}, {"query": "{ ho: hello }"}]'Limit the amount of Batched Requests
By default up to 10 GraphQL requests are allowed within a single HTTP request. If this amount is exceeded an error will be raised.
You can customize this option by passing an object to the batching configuration option:
import { createYoga, createSchema } from 'graphql-yoga'
import { createServer } from 'node:http'
export const yoga = createYoga<ServerContext, UserContext>({
schema: createSchema({
typeDefs: /* GraphQL */ `
type Query {
hello: String!
}
`
}),
batching: {
limit: 2
}
})
const server = createServer(yoga)
server.listen(4000, () => {
console.info('Server is running on http://localhost:4000/graphql')
})curl -X POST -H 'Content-Type: application/json' -i http://localhost:4000/graphql \
-d '[{"query": "{ hee: hello }"}, {"query": "{ ho: hello }"}, {"query": "{ holla: hello }"}]'When exceeding the batching limit the HTTP status code will be 413 (Payload Too Large) (opens in a new tab).
{
"errors": [{ "message": "Batching is limited to 2 operations per request." }]
}