В GraphQL, как я могу элегантно определять все более масштабные запросы? - PullRequest
0 голосов
/ 06 ноября 2019

Предположим, у меня есть домен, подобный этому:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...