繁体   English   中英

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

[英]is there a way to group queries in graphQL?

我正在尝试对 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":[...],
        ],
         ...                   
}

这就是为什么我们想要嵌套

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样式的连接记录中删除图层–但是可以检索您要查找的数据。

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

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

Apollo客户端将批处理单独的查询,将响应保留在规范化的缓存中- 无需在后端执行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM