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

Edit this page on GitHub