(РЕШЕНИЕ В КОНЦЕ ПОСТА)
Рассмотрим запрос с именем пользовательFetch со следующим определением:
type User_Details {
phone_number: String
}
type User {
name: String
details: User_Details
}
При извлечении Пользователь со следующими данными в базе данных я не получаю подполе телефонный номер.
// in database
{
name: "Joe"
}
Через GraphQL получаю следующее:
// response
{
name: "Joe",
details: null
}
когда я ожидал:
// expected response
{
name: "Joe",
details: {
phone_number: null
}
}
Как я могу заставить GraphQL сохранять подполя, даже если все они пусты?
Это проблема для моего внешнего интерфейса, когда отсутствуют целые подобъекты, как в предыдущем примере.
Спасибо за советы и хитрости ;)
Обновлено: РЕШЕНИЕ
Я понимаю, что GraphQL прозрачен и не применяет какой-либо формат вывода (просто выберите то, что доступно из полученных данных). В моем случае я (иногда) хочу применить это поведение. Основной случай — это когда я использую ответ в клиентском интерфейсе и мне нужно иметь возможность играть со всеми подсвойствами, даже если они еще не установлены в базе данных.
Заранее вы должны знать, что я уже построил среду вокруг graphql, которая позволяет мне много вещей (например, получение объекта по умолчанию/пустого типа). Еще не с открытым исходным кодом.
Чтобы обеспечить ответ со всеми подсвойствами, которые были сохранены в базе данных, я создал Промежуточное ПО GraphQL, который объединяет разрешенные данные с моим значением/объектом по умолчанию.
Таким образом, это простое дополнение к моей конечной точке graphql, которое в зависимости от параметров запроса позволяет мне заставить полный ответ или минималистичный обычный :)


GraphQL не определяет значение поля, это просто транспортный уровень. Если ваш объект выглядит так:
const user = { name: "Joe" };
И ваш запрос выглядит так:
{
user {
name
details
}
}
Движок GraphQL не может определить фактические данные вашего пользователя, поскольку данные пусты (или не определены, что в данном случае то же самое). Если вы хотите отправить ненулевые user.details, вы должны откуда-то их получить.
Чтобы быть конкретным, если вы хотите, чтобы ваш ответ выглядел так:
{
name: "Joe",
details: {
phone_number: null
}
}
Пользователь, которого вы отправляете, должен выглядеть так:
const user = {
name: "Joe",
details: {
phone_number: null
}
}
Спасибо за вашу помощь. Я работал над этим, как описано в моем исходном посте :)