You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GraphQL订阅被Mutation触发后的数据来源及返回类型匹配疑问

GraphQL订阅触发后的数据来源及类型匹配问题

一、订阅获取的数据来源

当Mutation触发GraphQL订阅时,订阅最终获取的数据由服务端触发订阅时传入的事件 payload 决定,并非固定取自Mutation的客户端参数或解析器返回值:

  • 你可以选择直接传递Mutation的客户端输入参数作为payload
  • 也可以使用Mutation解析器执行完成后的返回值
  • 甚至可以结合两者、或额外加工生成新数据作为payload传递给订阅者

比如在Apollo Server中,通过pubsub.publish方法触发订阅时,第二个参数就是要发送给订阅者的payload,这个值完全由开发者控制。

二、Mutation与订阅的返回类型要求

触发订阅的Mutation和订阅不需要拥有相同的返回类型,二者的类型定义是完全独立的。

你只需要保证触发订阅时传递的payload结构,能匹配订阅字段解析器所需的输入结构即可。举个实际的类型定义示例:

# Mutation返回User类型
type Mutation {
  updateUser(id: ID!, name: String!): User
}

# 订阅返回自定义的通知类型
type Subscription {
  userUpdated: UserUpdatedNotification
}

type User {
  id: ID!
  name: String!
}

type UserUpdatedNotification {
  userId: ID!
  updateTime: String!
  changeDetail: String!
}

在这个例子里,Mutation返回User,但订阅返回UserUpdatedNotification,触发订阅时可以从Mutation的返回值中提取id,再补充时间、变更详情等信息组成符合订阅类型的payload。

内容的提问来源于stack exchange,提问作者mystride

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:19:53