Использование GraphQL с условно связанными типами - PullRequest
0 голосов
/ 29 декабря 2018

У меня есть приложение, которое имеет тип со многими связанными типами.Например:

type Person {
  Name: String!
  Address: Address!
  Family: [Person!]!
  Friends: [Person!]!
  Job: Occupation
  Car: Car
}
type Address {...}
type Occupation {...}
type Car {...}

(не беспокойтесь о типах конкретно ...)

В любом случае, все это хранится в базе данных во многих таблицах.

Некоторые из этих запросов используются редко и являются медленными.Представьте, например, что в мире существуют миллиарды автомобилей, и требуется время, чтобы найти тот, который принадлежит интересующему нас человеку. Любой запрос к «getPerson» должен соответствовать полной схеме, а затем graphql свяжет его споля, которые необходимы.Но так как он медленный и может быть запрошен , мы должны выполнить запрос, даже если данные выбрасываются большую часть времени.

Я вижу только 2 решения для этого.

a) Просто выполняйте запрос каждый раз, и он всегда будет медленным

b) Создайте 2 отдельных параметра запроса.Один для "getPerson" и один для "getPersonWithCar", но тогда вы не сможете повторно использовать схему, и теперь Person определяется дважды.Один раз с точки зрения автомобиля и один раз без него.

Есть ли способ указать, присутствует ли поле в Query запрошенных полях?Таким образом, мы могли бы сказать, как

if (query.isPresent("Car")) {
  car = findCar();
} else {
  car = null;
}
...