我正在尝试对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":[...],
],
...
}
这就是为什么我们要嵌套
答案 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客户端将批处理独立的查询,将响应保留在标准化缓存中-无需在后端进行。