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
相关产品推荐
相关产品推荐

