Docs
Launch GraphOS Studio

Mutations in Apollo Kotlin


Mutations are that modify back-end data. As a convention in ,

are read and are write operations.

Defining a mutation

You define a in your app just like you define a , except you use the mutation keyword. Here's an example for upvoting a post:

UpvotePost.graphql
mutation UpvotePost($postId: Int!) {
upvotePost(postId: $postId) {
id
votes
}
}

And here's an example schema snippet that supports this :

schema.graphql
type Mutation {
upvotePost(postId: Int!): Post
}
type Post {
id: Int!
votes: Int!
content: String!
}

The of the Mutation type (such as upvotePost above) usually describe the actions that can perform. These usually take one or more , which specify the data to create or modify.

Mutation return types

The return type of a Mutation usually includes the backend data that's been modified. This provides the requesting client with immediate information about the result of the .

In the example above, upvotePost returns the Post object that's just been upvoted. Here's an example response:

{
"data": {
"upvotePost": {
"id": "123",
"votes": 5
}
}
}

For more information on return types, see

.

Generating mutation classes

Similar to queries, are represented by instances of generated classes, conforming to the Mutation interface. Constructor are used to define . You pass a mutation object to ApolloClient#mutation(mutation) to send the to the server, execute it, and receive typed results:

val upvotePostMutation = UpvotePostMutation(postId = 3)
val response = try {
apolloClient.mutation(upvotePostMutation).execute()
} catch(e: ApolloException) {
// handle error
}

Using fragments in mutation results

In many cases, you'll want to use results to update your UI.

are a great way to share result handling between queries and :

mutation UpvotePost($postId: Int!) {
upvotePost(postId: $postId) {
...PostDetails
}
}

Passing input objects

The includes

as a way to pass complex values to . Input objects are often used for , because they provide a compact way to pass in objects to be created:

mutation CreateReviewForEpisode($episode: Episode!, $review: ReviewInput!) {
createReview(episode: $episode, review: $review) {
stars
commentary
}
}
val reviewInput = ReviewInput(stars = 5, commentary = "This is a great movie!")
try {
val response = apolloClient.mutation(CreateReviewForEpisodeMutation(episode = Episode.NEWHOPE, review = reviewInput)).execute()
} catch (e: ApolloException) {
// handle exception
}
Previous
Queries
Next
Subscriptions
Edit on GitHubEditForumsDiscord

© 2024 Apollo Graph Inc.

Privacy Policy

Company