有没有办法在graphQL中对查询进行分组?

时间:2018-09-28 20:54:22

标签: graphql graphql-ruby

我正在尝试对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与红宝石一起使用。

请让我知道是否有人需要更多信息?

谢谢


编辑

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

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

这就是为什么我们要嵌套

2 个答案:

答案 0 :(得分:0)

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 }
}

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

答案 1 :(得分:-5)

我认为您对响应的期望是通过使用红宝石极大地启发的。我早些时候在一些项目中看到过这一点;)“让我们将所有内容打包到一个查询中,这是最佳选择”,并“将响应数据分发到组件”。

Ruby开发人员经常将反应当作另一个模板引擎,他们拒绝他自己,分开生活,不分开关注点,不赋予客户端应用程序自己的责任。一种路线,一种视图,简单的交互,没有真正的SPA ...最终导致不良的UX /可用性。他们对:D

视而不见

Apollo客户端将批处理独立的查询,将响应保留在标准化缓存中-无需在后端进行