订阅一个 GraphQL 项目

Posted

技术标签:

【中文标题】订阅一个 GraphQL 项目【英文标题】:Subscribe to one GraphQL item 【发布时间】:2018-03-12 20:56:04 【问题描述】:

将 GraphCool 用于我的 GraphQL 后端,我想知道如何在给定 ID 的情况下仅订阅单个项目。我一直在查看文档并尝试使用过滤器,但我仍然无法弄清楚。如果我想订阅所有项目变更,我知道我必须这样做:

subscription 
  Photo
    node 
      id
      title
      url
    
  

如何收听具有给定 ID 的项目?

【问题讨论】:

【参考方案1】:

filter capabilities known from the Simple API 也可以在订阅 API 中使用。您可以为此使用filter 对象内的node 属性。以下是订阅过滤器的一些示例:

订阅创建的照片

使用mutation_in,我们可以决定是否要监听创建、更新或删除的事件(或它们的混合):

subscription 
  Photo(filter: 
    mutation_in: [CREATED]
  ) 
    node 
      id
      title
      url
    
  

订阅已创建的照片并更新特定字段的照片

在监听更新时,我们可以进一步指定只监听特定字段的更新,使用updatedFields_containsupdatedFields_contains_everyupdatedFields_contains_some

subscription 
  # we can only use `updatedFields_x` filters together with `UPATED`
  # so we use OR
  Photo(filter: 
    OR: [
      mutation_in: [UPDATED]
      updatedFields_contains: "title"
    , 
      mutation_in: [CREATED]
    ]

  ) 
    previousValues 
      title # contains old title
    
    node 
      id
      title # contains new title
      url
    
  

订阅某张照片的更新

对于所有订阅查询,我们可以使用node进一步细化订阅条件。这与用于allPhoto 的过滤器相同,例如:

subscription updatedPhoto($id: ID!) 
  Photo(filter: 
    mutation_in: [UPDATED]
    node: 
      id: $id
    
  ) 
    previousValues 
      title # contains old title
    
    node 
      id
      title # contains new title
      url
    
  

【讨论】:

你的回答真的很有帮助。谢谢! :)

以上是关于订阅一个 GraphQL 项目的主要内容,如果未能解决你的问题,请参考以下文章

Amplify GraphQL 订阅不响应事件

如何立即触发 apollo graphql 订阅?

GraphQL/Prisma 订阅仅针对 DELETE 触发

AppSync GraphQL 订阅以分组数据

如何在 type-graphql 中触发订阅?

如何在 Graphql.js 中使用 GraphQL 订阅