欢迎于10月8日至10日参加在纽约市的GraphQL联盟和API平台工程最新技巧、趋势和新闻学习活动。参加2024年纽约市的GraphQL峰会
文档
免费开始
您正在查看该软件旧版本的文档。 切换到最新稳定版本。

Apollo Kotlin中的突变


突变 ,用于修改后端数据。在GraphQL中,查询是只读操作,而是写操作。

定义突变

您定义一个的方式和定义一样,只是使用mutation关键词。以下是一个对帖子进行投票的示例突变:

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

以下是一个支持此 mutate 的示例模式片段:

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

上面的 Mutation 类型的 (如 upvotePost 上所示)通常描述了 mutations 可以执行的操作。这些 字段 通常需要一个或多个 ,这些参数指定要创建或修改的数据。

Mutation 返回类型

穆特 字段 的返回类型通常包括已修改的后端数据。这为请求客户端提供了关于 mutation 结果的即时信息。

在上述示例中,upvotePost 返回刚刚获得点赞的 Post 对象。以下是一个示例响应:

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

有关 mutation 返回类型更多信息,请参阅 设计mutations

生成mutation类

与查询类似,mutations 通过生成的类的实例表示,符合 Mutation 界面。构造函数 arguments 用于定义 mutation 。您可以将mutation对象传递到 ApolloClient#mutation(mutation) 以将 mutation 发送到服务器,执行它并接收类型化结果:

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

在mutation结果中使用片段

在许多情况下,您会想使用 mutation 结果来更新UI。 片段 是在查询和 mutations 之间共享结果处理的好方法:

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

传递输入对象

GraphQL 包括输入对象作为向字段传递复杂值的一种方式。输入对象通常用于突变变量,因为它们以紧凑的方式传递要创建的对象:

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
}
上一页
查询
下一页
订阅
评分文章评分在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,以Apollo GraphQL的名义。

隐私政策

公司