在GraphQL中,如何优雅地定义范围越来越大的查询?
假设我有这样一个域:在GraphQL中,如何优雅地定义范围越来越大的查询?,graphql,Graphql,假设我有这样一个域: type ProductSku { id: ID! name: String } type ProductLine { id: ID! name: String productSkus: [ProductSku] } type Manufacturer { id: ID! name: String productLines: [ProductLine] } 在我的网站上,我有如下路线: /-所有制造商的列表 /apple-关于制造商的
type ProductSku {
id: ID!
name: String
}
type ProductLine {
id: ID!
name: String
productSkus: [ProductSku]
}
type Manufacturer {
id: ID!
name: String
productLines: [ProductLine]
}
在我的网站上,我有如下路线:
-所有制造商的列表/
-关于/apple
制造商的信息
apple
-苹果/apple/iphone-11/
下的
产品线
信息iphone-11
-关于/apple/iphone-11/64gb黑色
产品SKU的信息
在64gb黑色
下,苹果iphone-11
查询
类型时遇到问题
我从以下几点开始:
type Query {
manufacturers: [Manufacturer]
}
这给了我所有的数据,所以它完成了任务。但是,嵌套路由效率低下,因为我丢弃了大部分客户端数据
或者,我可以为每条路线定义一个查询:
type Query {
manufacturers: [Manufacturer]
manufacturer(manufacturerId: ID): Manufacturer
productLine(manufacturerId: ID, productLineId: ID): ProductLine
productSku(manufacturerId: ID, productLineId: ID, productSkuId: ID): ProductSku
}
但这似乎非常冗长
我应该如何处理这个问题
请注意,ID仅在父级空间内是唯一的。例如,可能有两个产品线包含产品SKU
black-64gb
。这是因为它们实际上是URL中的slug 这有什么详细的吗?我已经定义了如何解析制造商
,因此,我需要再次为制造商
获取产品线
,这似乎很奇怪。为什么不让产品线
的查询更通用,只接受产品线ID
&让制造商.产品线
的解析程序处理两者之间的关系呢?