在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
    下,苹果
我在为GraphQL服务器设计
查询
类型时遇到问题

我从以下几点开始:

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
&让
制造商.产品线
的解析程序处理两者之间的关系呢?