title: Strawberry docs
General
Types
Codegen
Guides
Extensions
Editor integration
Concepts
Integrations
Federation
Operations
Schema Directives
Strawberry supports schema directives, which are directives that don't change the behavior of your GraphQL schema but instead provide a way to add additional metadata to it.
For example our Apollo Federation integration is based on schema directives.
Let's see how you can implement a schema directive in Strawberry, here we are
creating a directive called keys
that can be applied to
Object types definitions and accepts one parameter called
fields
. Note that directive names, by default, are converted to camelCase on
the GraphQL schema.
Here's how we can use it in our schema:
import strawberryfrom strawberry.schema_directive import Location
@strawberry.schema_directive(locations=[Location.OBJECT])class Keys: fields: str
from .directives import Keys
@strawberry.type(directives=[Keys(fields="id")])class User: id: strawberry.ID name: str
This will result in the following schema:
type User @keys(fields: "id") { id: ID! name: String!}
Overriding field names
You can use strawberry.directive_field
to override the name of a field:
@strawberry.schema_directive(locations=[Location.OBJECT])class Keys: fields: str = strawberry.directive_field(name="as")
Locations
Schema directives can be applied to many different parts of a schema. Here's the list of all the allowed locations:
Name | Description | |
---|---|---|
SCHEMA | strawberry.Schema | The definition of a schema |
SCALAR | strawberry.scalar | The definition of a scalar |
OBJECT | strawberry.type | The definition of an object type |
FIELD_DEFINITION | strawberry.field | The definition of a field on an object type or interface |
ARGUMENT_DEFINITION | strawberry.argument | The definition of an argument |
INTERFACE | strawberry.interface | The definition of an interface |
UNION | strawberry.union | The definition of an union |
ENUM | strawberry.enum | The definition of a enum |
ENUM_VALUE | strawberry.enum_value | The definition of a enum value |
INPUT_OBJECT | strawberry.input | The definition of an input object type |
INPUT_FIELD_DEFINITION | strawberry.field | The definition of a field on an input type |