InputMutationExtension

The pattern of defining a mutation that receives a single input type argument called input is a common practice in GraphQL. It helps to keep the mutation signatures clean and makes it easier to manage complex mutations with multiple arguments.

The InputMutationExtension is a Strawberry field extension that allows you to define a mutation with multiple arguments without having to manually create an input type for it. Instead, it generates an input type based on the arguments of the mutation resolver.

Usage example:

import strawberry
from strawberry.field_extensions import InputMutationExtension
@strawberry.type
class User:
username: str
@strawberry.type
class Query:
hello: str
@strawberry.type
class Mutation:
@strawberry.mutation(extensions=[InputMutationExtension()])
def register_user(
self,
username: str,
password: str,
) -> User:
user = User(username=username)
# maybe persist the user in a database
return user
schema = strawberry.Schema(query=Query, mutation=Mutation)

The Strawberry schema above and the usage of the InputMutationExtension will result in the following GraphQL schema:

type User {
username: String!
}
input RegisterUserInput {
username: String!
password: String!
}
type Mutation {
registerUser(input: RegisterUserInput!): User!
}
type Query {
hello: String!
}

API reference:

No arguments