В GraphQL в чем смысл «ребер» и «узел»?

29

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

    
задан Ska 06.03.2017 в 11:15
источник
  • Соединения, ребра и узлы - это терминология, в основном используемая в контексте Relay - клиента GraphQL. Более подробную информацию можно найти в этом FAQ. –  marktani 06.03.2017 в 13:42
  • Просто для пояснения: соединения не являются релевантными. Подробный обзор см. В этой статье: medium.com/p/explaining-graphql-connections-c48b7c3d6976 –  helfer 06.03.2017 в 17:36

1 ответ

20

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

Характеристики реле GraphQl

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

Connections:

  • соединение представляет собой набор объектов с метаданными таких как edges , pageInfo ...
  • pageInfo будет содержать hasNextPage , hasPreviousPage , startCursor , endCursor

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

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

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

Ссылка

Node:

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

Реляционная разбивка работает как

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

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

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

Ссылка

    
ответ дан p0k8_ 06.03.2017 в 11:53
  • Я думаю, что этот ответ имеет смысл, но в нем много заблуждений. В этой статье очень хорошо объясняются причины, лежащие в основе соединений GraphQL: medium.com/p/explaining-graphql-connections-c48b7c3d6976 –  helfer 06.03.2017 в 17:37
  • , где вы находите заблуждения, это всего лишь краткая информация, если вы обнаружили какие-либо заблуждения, вы всегда можете улучшить ее, чтобы сделать ее лучше –  p0k8_ 06.03.2017 в 17:39
  • Справедливая точка. Я не знал, что могу отредактировать ответ! –  helfer 08.03.2017 в 01:20
  • @helfer теперь, вы знаете, вы можете помочь улучшить ответ. Преуспевать –  p0k8_ 08.03.2017 в 12:43
  • Могу ли я работать с этими конструкциями через графический интерфейс? Например hasNextPage, или они доступны только через JS с Relay? –  Ska 14.03.2017 в 09:00