【问题标题】:Query by relationship for GraphQL?按关系查询 GraphQL?
【发布时间】:2019-10-30 12:38:47
【问题描述】:

您将如何使用 graphQL 通过“关系”实体值进行查询? 例如,假设我们有一堆人对象。然后,每个“人”都与兴趣/爱好相关,然后该兴趣/爱好具有称为“名称”的属性。 现在假设我们要查询每个有特定兴趣的人的姓名,如何使用 GraphQL “进行”这样的查询? 使用 OData 类似于 Persons?$select=name&$expand(Interests($filter=name eq 'Surfing')).. GraphQL 的等价物是什么?

【问题讨论】:

    标签: graphql


    【解决方案1】:

    没有一个等价物。除了自省之外,GraphQL 规范没有规定模式应该具有什么类型、应该公开哪些字段或这些字段应该采用什么参数。换句话说,没有一种方法可以查询关系或执行过滤、排序或分页等操作。如果您使用 Relay,它有 its own spec 提供更多关于不同节点之间的分页和连接等方面的指导,但即使是 Relay 也与过滤无关。由各个服务决定如何实现这些功能。

    例如,如果我们设置GraphcoolPrisma 服务器,我们的查询可能如下所示:

    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 等工具利用此功能为服务器模式生成文档。
    • 啊,好的。再次感谢:)
    猜你喜欢
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2021-01-13
    • 2018-08-04
    • 1970-01-01
    • 2021-01-18
    • 2020-10-15
    相关资源
    最近更新 更多