按关系查询 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?的主要内容,如果未能解决你的问题,请参考以下文章

具有一对多关系的 GraphQL 循环查询

如何按 Graphql 查询结果分组

如何使用 GraphQL 查询 Wordpress 关系字段?

GraphQL/Graph.cool 查询过滤嵌套关系

按当前时间戳的 GraphQL 查询过滤器

查询放大graphql多对多关系