я ничего не понял, хотя перечитал 5 раз
что же там не понятного - graphql описывает получение в качестве ответа формат вложенных объектов согласно схемы, то есть такой graphql запрос
{
user(id: 1) {
name
age
friends {
id
name
age
}
}
}вернет объект юзера с вложенными объектами его друзей
{
id: "1",
name: "user1",
age: 50,
friends: [
{id: "..", name: "...", age: "..."},
{id: "..." name: "...", age: "..." }
]
}Почему это не подходит как формат для общения клиента и сервера - проблемы начинаются тогда когда мы описываем более сложные запросы например когда пишем соцсеть и хотим показать список людей с которыми юзер может быть знаком и нужно получить от сервера список друзей всех друзей юзера, то есть примерно такой запрос
{
user(id: 1) {
name
age
friends {
id
friends: {
id
age
name
}
}
}
}и что получится - мы получим огромное дерево вложенных объектов где может быть много дублей -один и тот же юзер может находится в списке друзей многих других юзеров, и как результат мегабайты json-a, тормоза на парсинг и обработку а вот если бы graphql отдавал бы результат в виде нормализированной структуры
{
users: {
"1": {
id: "1",
name: "...",
age: ...
friends: ["2", "3"]
},
"2": {
id: "2",
name: "...",
age: ...
friends: ["4", "5", ...]
}
}
}то у нас не было бы никакого дублирования потому что один и тот же юзер включался бы в ответ только один раз