У меня есть приложение, которое имеет тип со многими связанными типами.Например:
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;
}