graphql - 在查询列表时订阅列表以捕获所有项目?
问题描述
这是一个概念性的 GraphQL 问题,与特定的客户端或服务器无关。如果我有一些项目的列表并且我想查询然后订阅更新,我应该怎么做?先订阅,再查询还是反过来?
想象一下以下示例模式:
type Query {
commentsByPostId(postId: ID!): String
}
type Mutation {
addCommentToPost(postId: ID!, comment: String): String
}
type Subscription {
commentAdded(postId: ID!): String
}
schema {
query: Query
mutation: Mutation
subscription: Subscription
}
用户点击帖子。我想获取现有评论的列表并订阅未来的更新。我真的不想做手动重复数据删除,但不丢失更新更重要。所以到目前为止我想出的最好的处理方法是首先订阅更新,然后进行查询,一旦查询结果到达,将它们与迄今为止收到的更新列表合并。有更好的方法吗?
解决方案
方法 A
根本不要使用查询。只需让您的订阅返回曾经添加到帖子中的所有评论。您将它们收集到客户端的列表中(无论如何您都这样做)。
单独传输它们可能会有一些开销,但它工作得很好,客户端上的代码更少。另一方面,客户端很难知道何时收到“初始”评论,并且应该第一次呈现。
方法 B
发送带有查询结果的令牌(例如时间戳),并让您的订阅接受与参数相同的参数以接收此后的所有事件。
scalar Cursor;
type Comments {
continue: Cursor
values: [String!]
}
type Query {
commentsByPostId(postId: ID!): Comments
}
type Subscription {
commentsAdded(postId: ID!, since: Cursor): String
}
推荐阅读
- python-3.x - 在命令提示符下运行机器人框架测试用例时出现 UnicodeDecodeError: 'utf-8'
- python - 当记录不按顺序时,df1 减去 df2 在 Pyspark 中无法按预期工作
- xml - 当我点击 validate now 时,Notepad++ 不会询问我 XLM Schema
- visual-studio - 如何从 PowerShell 中的 COM 对象获取不同的接口
- sql - 在oracle 19中查找两个表之间的行差异
- numpy - ndarry 到普通数组有什么区别以及如何转换它们?
- python - Python:比较 Python 中具有不同行数和 Compsite 键的两个数据帧
- javascript - 如何连接两个html元素?
- ruby-on-rails - 在 Ruby on Rails 中将 PDF/DOC/DOCx 转换为图像
- python - Obspy 频谱图 ValueError (noverlap 必须小于 n)