Что в GraphQL означает «ребра» и «узел»?

104

Я использую конкретную конечную точку GraphQL, и хотя я предоставляю чистую структуру JSON в качестве запроса, когда я получаю результаты, я получаю теги «края» и «узел». Кажется, что он загрязняет мои данные без очевидной выгоды. Почему он существует и можно ли от него избавиться для более быстрого и простого анализа данных?

Ска
источник
1
Соединения, ребра и узлы - это терминология, которая в основном используется в контексте Relay, клиента GraphQL. Более подробную информацию можно найти в этом FAQ .
marktani 06
2
Просто чтобы уточнить: соединения не относятся к Relay. Для взгляда в глубину, в этой статье: medium.com/p/explaining-graphql-connections-c48b7c3d6976
Helfer
Это своего рода стандартный способ разбивки на страницы длинных списков результатов. Не привязан к какой-либо реализации.
Мэтт

Ответы:

64

Начнем с краткого введения простыми словами


Технические характеристики реле GraphQl

  • механизм повторной загрузки объекта
  • описание того, как перелистывать соединения
  • структура вокруг мутаций, чтобы сделать их предсказуемыми

Подключения:

  • соединение - это набор объектов с метаданными, такими как edges, pageInfo...
  • pageInfo будет содержать hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage сообщит нам, доступны ли еще ребра или мы достигли конца этого соединения.
  • Массив записей: ребра

    • ребра предоставят вам гибкость в использовании ваших данных (узел)
    • ребра помогут вам для разбивки на страницы, есть graphql, GraphQLListно без таких функций, как разбиение на страницы, только с массивом объектов (данных)
  • Каждое ребро имеет

    • a node: запись или данные
    • a cursor: строка в кодировке base64 для помощи в ретрансляции с разбивкой на страницы

https://facebook.github.io/relay/graphql/connections.htm

Узел:

  • вы можете установить количество узлов, которые вам нужно показать, используя реле connectionArgs(first, last, after, before)

Пагинация реле работает как

  • Выбирает все объекты в коллекции и возвращает срез на основе first/lastзаписей x, используемых через connectionArgs

  • after/before используются для указания серверу GraphQL количества требуемого среза (данных) с помощью курсора из узла

Есть еще много вещей , чтобы рассмотреть , как nodeDefinitions, globalFieldId,nodeInterfaces

https://github.com/graphql/graphql-relay-js#object-identification

p0k8_
источник
17
Я думаю, что этот ответ верен, но он содержит много неправильных представлений. В данной статье рассматривается обоснование соединений GraphQL довольно хорошо: medium.com/p/explaining-graphql-connections-c48b7c3d6976
Helfer
6
где вы находите заблуждения, это всего лишь краткая информация, если вы обнаружили какие-либо заблуждения, вы всегда можете улучшить их, чтобы стало лучше
p0k8_ 06
Могу ли я работать с этими конструкциями через пользовательский интерфейс graphql ? Например hasNextPage , или они доступны только через JS с Relay?
Ska
да, вы можете работать с ними из пользовательского интерфейса graphiql, используя graphql-relay
p0k8_
не each node will have a cursor, скорее each edge will have a cursor, обратитесь к тому blog.apollographql.com/…
wind