GraphQL Complexity Limit
This policy allows you to add a limit for the depth and a limit for the complexity of a GraphQL query.
Configuration#
{
"name": "my-graphql-complexity-limit-inbound-policy",
"policyType": "graphql-complexity-limit-inbound",
"handler": {
"export": "GraphQLComplexityLimitInboundPolicy",
"module": "$import(@zuplo/runtime)",
"options": {
"useComplexityLimit": [
{}
],
"useDepthLimit": [
{
"ignore": []
}
]
}
}
}
Options#
name
the name of your policy instance. This is used as a reference in your routes.policyType
the identifier of the policy. This is used by the Zuplo UI. Value should begraphql-complexity-limit-inbound
.handler/export
The name of the exported type. Value should beGraphQLComplexityLimitInboundPolicy
.handler/module
the module containing the policy. Value should be$import(@zuplo/runtime)
.handler/options
The options for this policy:useComplexityLimit
complexityLimit
The maximum complexity a query is allowed to have
endpointUrl
The endpoint URL to use for the complexity calculation
useDepthLimit
depthLimit
The maximum depth a query is allowed to have
ignore
The fields to ignore when calculating the depth of a query
Depth Limit
Limit the depth a GraphQL query is allowed to query for.
- maxDepth - Number of levels a GraphQL query is allowed to query for.
This allows you to limit the depth of a GraphQL query. This is useful to prevent DoS attacks on your GraphQL server.
{
# Level 0
me {
# Level 1
name
friends {
# Level 2
name
friends {
# Level 3
name
# ...
}
}
}
}
Complexity Limit
Example:
- maxComplexity - Maximum complexity allowed for a query.
{
me {
name # Complexity +1
age # Complexity +1
email # Complexity +1
friends {
name # Complexity +1
height # Complexity +1
}
}
}
# Total complexity = 5