В чем разница между ребрами верхнего уровня и узлами верхнего уровня? - PullRequest
0 голосов
/ 12 февраля 2020

Я новичок в GraphQL и использую WPGraphQL и WooGraphQL.

Их соединения верхнего уровня позволяют мне расширять как nodes, так и edges следующим образом:

{
  wpgraphql {
    productCategories {
      # What's the difference between these?

      # 1) top-level nodes
      nodes {
        id
        name
      }

      # 2) top-level edges
      edges {
        node {
          id
          name
        }
      }
    }
  }
}

Который возвращает ответ так (идентификаторы опущены):

{
  "data": {
    "wpgraphql": {
      "productCategories": {
        "nodes": [
          {
            "name": "Accessories"
          },
          {
            "name": "Gift Cards"
          },
          {
            "name": "Indoor"
          }
        ],
        "edges": [
          {
            "node": {
              "name": "Accessories"
            }
          },
          {
            "node": {
              "name": "Gift Cards"
            }
          },
          {
            "node": {
              "name": "Indoor"
            }
          }
        ]
      }
    }
  }
}

Мой вопрос прост: Какой мне использовать? Почему есть оба?

Вот снимок экрана проводника GraphiQL, если это помогает.

explorer preview

1 Ответ

1 голос
/ 12 февраля 2020

Схемы GraphQL, которые реализуют спецификацию Relay , используют Типы соединений для моделирования отношений один-ко-многим или многие-ко-многим.

Каждое соединение включает в себя список ребер и объект PageInfo. Каждое ребро включает node и cursor для этого узла.

Края также могут содержать дополнительные поля - например, если у нас есть связь с друзьями между узлами пользователя, мы можем включить временные метки, когда были созданы дружеские отношения. Обычно, однако, края используются только для поля cursor, которое они выставляют. Значение cursor используется при разбиении на страницы через соединение и обнажении его для каждого края, что означает, что вы можете начать разбивку на страницы с любой произвольной точки в результатах. Курсор не включен как часть узла, поскольку он может указывать c для соединения, а не только для самого узла (например, некоторые курсоры кодируют критерии сортировки).

Однако, если он является клиентом вам не нужно разбивать на страницы результаты соединения и просто извлекать все узлы, возможно, вам не нужны курсоры. В этом сценарии ios наличие ребер не добавляет никакого значения, а просто увеличивает глубину вашего запроса. В результате, для удобства клиента, некоторые службы GraphQL решили выставить только узлы для соединения в дополнение к краям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...