按关系查询 GraphQL?
Posted
技术标签:
【中文标题】按关系查询 GraphQL?【英文标题】:Query by relationship for GraphQL? 【发布时间】:2019-10-30 12:38:47 【问题描述】:您将如何使用 graphQL 通过“关系”实体值进行查询? 例如,假设我们有一堆人对象。然后,每个“人”都与兴趣/爱好相关,然后该兴趣/爱好具有称为“名称”的属性。 现在假设我们要查询每个有特定兴趣的人的姓名,如何使用 GraphQL “进行”这样的查询? 使用 OData 类似于 Persons?$select=name&$expand(Interests($filter=name eq 'Surfing')).. GraphQL 的等价物是什么?
【问题讨论】:
【参考方案1】:没有一个等价物。除了自省之外,GraphQL 规范没有规定模式应该具有什么类型、应该公开哪些字段或这些字段应该采用什么参数。换句话说,没有一种方法可以查询关系或执行过滤、排序或分页等操作。如果您使用 Relay,它有 its own spec 提供更多关于不同节点之间的分页和连接等方面的指导,但即使是 Relay 也与过滤无关。由各个服务决定如何实现这些功能。
例如,如果我们设置Graphcool 或Prisma 服务器,我们的查询可能如下所示:
query
persons(where:
interest:
name: "Surfing"
)
name
对Hasura 服务器的查询可能如下所示:
query
persons(where:
interest:
name:
_eq: "Surfing"
)
name
但没有什么能阻止您创建支持以下查询的架构:
query
persons(interest: "Surfing")
name
【讨论】:
啊!感谢您的回答 :)。所以基本上 GraphQL deosnt 遵循一个严格的标准来说明应该如何做。但它取决于服务的开发人员来提供如何使用服务的良好文档?与使用更“严格”格式的 OData 相比 我会说 OData 对某些事情更加固执,但基本上是的。 GraphQL 具有自省功能,因此它是自记录的,并且大多数服务器都使用 GraphiQL 和 GraphQL Playground 等工具利用此功能为服务器模式生成文档。 啊,好的。再次感谢:)以上是关于按关系查询 GraphQL?的主要内容,如果未能解决你的问题,请参考以下文章