Apollo Kotlin 中的更新
更新是GraphQL 操作,它用于修改后端数据。按照 GraphQL 的约定,查询是读取操作,而更新是写入操作。
定义一个更新
在您的应用中定义一个 更新,就像定义 查询 一样,只需使用 mutation
关键字。以下是一个用于投票帖子的mutation
示例:
UpvotePost.graphql
mutation UpvotePost($postId: Int!) {upvotePost(postId: $postId) {idvotes}}
以下是一个支持此mutation的示例模式片段:
schema.graphqls
type Mutation {upvotePost(postId: Int!): Post}type Post {id: Int!votes: Int!content: String!}
通常,字段的Mutation
类型(如上upvotePost
所示)描述mutations可以执行的操作。这些字段通常接受一个或多个参数,并指定要创建或修改的数据。
mutations 返回类型
通常,Mutation
字段的返回类型包括已修改的后端数据。这为请求的客户端提供了有关mutation结果的立即信息。
在上述示例中,upvotePost
返回刚被点赞的Post
对象。以下是一个示例响应:
{"data": {"upvotePost": {"id": "123","votes": 5}}}
有关 mutation 返回类型更多信息,请参阅 设计mutations.
生成mutation类
类似于查询, mutations 通过生成的类的实例表示,遵循 Mutation
接口。构造函数 arguments 用于定义 mutation 变量。您可以通过 ApolloClient.mutation(mutation)
将 mutation 对象传递给服务器,执行它并接收已类型化的结果:
val upvotePostMutation = UpvotePostMutation(postId = 3)val response = apolloClient.mutation(upvotePostMutation).execute()
使用mutation结果中的片段
在许多情况下,您会希望使用 mutation 结果来更新 UI。 片段是一种在查询和 mutations 之间共享结果处理的很好方式:
mutation UpvotePost($postId: Int!) {upvotePost(postId: $postId) {...PostDetails}}
传递输入对象
GraphQL 类型系统包括作为传递复杂值到字段的 方式输入对象。输入对象通常用于变异变量,因为它们提供了一种紧凑的方式传递要创建的对象:
mutation CreateReviewForEpisode($episode: Episode!, $review: ReviewInput!) {createReview(episode: $episode, review: $review) {starscommentary}}
val reviewInput = ReviewInput(stars = 5, commentary = "This is a great movie!")val response = apolloClient.mutation(CreateReviewForEpisodeMutation(episode = Episode.NEWHOPE, review = reviewInput)).execute()