【问题标题】:is there a way to group queries in graphQL?有没有办法在 graphQL 中对查询进行分组?
【发布时间】:2019-03-04 21:03:58
【问题描述】:

我正在尝试对 graphQL 查询进行分组,以获得更有条理的响应。

我想查询 allEmployees 并返回以下格式的内容

GraphQL 查询

{
    Employees:allEmployees{
        id
        firstName
        lastName    
    }
}

回应

{
    "data": {
        "Employees": [
            "new":[
                {
                    "id": "1",
                    "firstName": "James",
                    "lastName": "Test"
                },
                {
                    "id": "3",
                    "firstName": "Charles",
                    "lastName": "Tes"
                }
            ],
            "updated":[
                {
                    "id": "4",
                    "lastName": "Test"
                },
            ],
            "deleted":[
                {
                    "id": "1",
                },
            ],
        }
    }
}

我已经研究了一些选项来通过片段上的别名来命名子请求(比如新的、更新的和删除的),但这似乎不是一回事。我看过工会,但这似乎不是我想要的。

理想情况下,我想查询 graphql 之类的......

{
    Employees:{
        new: allEmployees(status:"new"){
            id
            firstName
            lastName    
        }

        updated: allEmployees(status:"updated"){
            id
            firstName
            lastName    
        }

        deleted: allEmployees(status:"deleted"){
            id
        }
}

但我认为不可能传递这样的嵌套查询。

有没有办法做这样的事情?我通过 graphql-ruby gem 将 graphql 与 ruby​​ 一起使用。

如果有人需要更多信息,请告诉我?

谢谢


编辑

澄清一下。我们有多个实体将遵循新的、更新的、删除的模式。希望尝试在结果嵌套在父名称/别名(员工、用户)中的情况下获得响应

{
    "data": {
        "Employees": [
            "new":[...],
            "updated":[...],
            "deleted":[...],
        ],
        "Users": [
            "new":[...],
            "updated":[...],
            "deleted":[...],
        ],
         ...                   
}

这就是我们想要嵌套的原因

【问题讨论】:

  • 只玩/graphiQL?只需将一个查询放在另一个查询下方
  • @xadm 感谢您的评论。我正在寻找使用标签对查询进行分组。如果您有时间,请参阅上面的编辑。
  • 如果您需要为不同的实体执行此操作,您需要为每个实体定义一个Type。一旦你有了它,只需将你从数据库中查询的记录分组到你想要的相应标签中。

标签: graphql graphql-ruby


【解决方案1】:

GraphQL 绝对支持嵌套查询和多个顶级查询,graphql-ruby 支持这些就好了。

如果您的 GraphQL 架构如下所示:

type Employee {
  id: ID!
  firstName: String
  lastName: String
}
enum Status { NEW, UPDATED, DELETED }
type Query {
  allEmployees(status: Status): [Employee!]!
}

然后你可以写一个查询

fragment EmployeeData on Employee { id firstName lastName }
query Everyone {
  new: allEmployees(status: NEW) { ... EmployeeData }
  updated: allEmployees(status: UPDATED) { ... EmployeeData }
  deleted: allEmployees(status: DELETED) { ... EmployeeData }
}

这不会有您正在寻找的特定形式 - 没有很好的方法可以在查询中添加或删除任意级别,例如添加“员工”标签或从 React 样式的连接记录中删除层– 但它可以检索您要查找的数据。

【讨论】:

  • 感谢@DavidMaze 的回复。我已经更新了问题以进一步解释我正在寻找的格式。根据您的回答,我认为不可能做我正在寻找的事情。我是否能够创建一种解析为我正在寻找的格式的类型,或者这会打破 graphql 约定?
  • 您可以通过添加查询Employees: EmployeeStatuses,然后使用newupdateddeleted 字段创建一个类型,从而创建一个产生精确响应格式的类型结构。它少了一点……不过 GraphQLy,感觉就像重写你的 API 以符合特定客户的期望。
猜你喜欢
  • 2019-09-02
  • 2021-12-03
  • 1970-01-01
  • 2015-11-29
  • 2018-11-08
  • 2011-02-26
  • 2019-10-16
  • 2021-03-07
  • 1970-01-01
相关资源
最近更新 更多