Предположим, у меня есть домен, подобный этому:
type ProductSku {
id: ID!
name: String
}
type ProductLine {
id: ID!
name: String
productSkus: [ProductSku]
}
type Manufacturer {
id: ID!
name: String
productLines: [ProductLine]
}
На моем веб-сайте есть такие маршруты:
/
- список всех производителей /apple
- Информация о Manufacturer
apple
/apple/iphone-11/
- Информация о ProductLine
iphone-11
под apple
/apple/iphone-11/64gb-black
- Информация оProductSku
64gb-black
в iphone-11
, в apple
У меня возникли проблемы при разработке типа Query
для моего сервера 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
}
Но это кажется очень многословным.
Как мне подойти к этому?
Обратите внимание, что идентификаторы уникальны только в пределах родительского пространства. Например, может быть две товарные линии, содержащие товар SKU black-64gb
. Это потому, что они на самом деле слизни из URL.