Можно ли с GraphQL вернуть некоторые поля в соответствии с условием? Например:
[{
name: "Foo",
age: 38
},
{
name: "Bar",
age: 50
}]
Я хочу всегда возвращать name, но age, только если имя - Foo. Результат будет примерно таким:
[{
name: "Foo",
age: 38
},
{
name: "Bar"
}]
Я хочу получить данные для некоторых полей, используя условие, например: query {users {name age @include (if: ...)}} Я хочу вернуть возраст поля, только если имя - «Foo». Результат должен быть таким: [{name: "Foo", age: 38}, {name: "Bar"}]


В определении типа вы можете установить обязательные и необязательные свойства типа. Например, ваш тип может быть определен как:
type Person {
name: String!
age: Int
}
У вас было бы расширение запроса, определяющее что-то вроде этих строк:
extend type Query {
getPeople: [Person]
}
Там, где у вас была бы логика для возврата различных частей этого, будет ваш код преобразователя. Это может быть что-то вроде этого:
getPeople(obj, input, context) {
// Make a request for the information from db or wherever it is stored
// The sql or api request can do the filtering, if not it can be done after it's saved
const people = context.Users.get.People();
// Map over fields for expected return per user based on logic
const filteredPeople = people.map(person => {
if (person.name === "Foo") {
return { name: person.name, age: person.age }
} else {
return { name: person.name };
}
});
return filteredPeople;
};
Короче говоря, резолверы - это то, что позволяет вам изменять возвращаемую информацию.
GraphQL поддерживает необязательные и обязательные поля, не могли бы вы объяснить, что вы имеете в виду?