У GraphQL, що означає «краї» та «вузол»?


102

Я споживаю певну кінцеву точку GraphQL, і хоча я надаю чисту структуру JSON як запит, коли я отримую результати, я отримую теги "краї" та "вузол". Здається, це забруднює мої дані без очевидної вигоди. Чому він існує і чи можна позбутися таких для швидшого та простішого аналізу даних?


1
З'єднання, ребра та вузли - це термінологія, яка в основному використовується в контексті Relay, клієнта GraphQL. Докладнішу інформацію можна знайти в цьому FAQ .
marktani

2
Тільки для уточнення: з'єднання не є специфікою реле. Для погляду в глибину, в цій статті: medium.com/p/explaining-graphql-connections-c48b7c3d6976
Helfer

Це дещо стандартний спосіб забезпечення підкачки довгих списків результатів. Не прив'язаний до жодної реалізації.
Matt

Відповіді:


64

Почнемо з короткого вступу простими словами


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

  • механізм витягування об'єкта
  • опис перегляду сторінок через з'єднання
  • структура навколо мутацій, щоб зробити їх передбачуваними

З'єднання:

  • з'єднання - це сукупність об'єктів з метаданими, такими як edges, pageInfo...
  • pageInfo буде містити hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage скаже нам, чи є більше доступних країв, чи ми досягли кінця цього з’єднання.
  • Масив записів: краї

    • edge забезпечить вам гнучкість використання ваших даних (вузол)
    • краю допоможе вам для пагінацію, Існує graphql , GraphQLListале без функціональних груп, таких як пагінація, тільки з масивом об'єктів (дані)
  • Кожен край має

    • a node: запис або дані
    • a cursor: кодований рядок base64, щоб допомогти передати пагінацію

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

Вузол:

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

Реле-пагінація працює як

  • Отримує всі об'єкти в колекції та повертає фрагмент на основі first/lastx записів, що використовуються через connectionArgs

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

Є ще багато речей , щоб розглянути , як nodeDefinitions, globalFieldId,nodeInterfaces

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


17
Я думаю, що ця відповідь має суть, але вона містить багато помилок. У даній статті розглядається обгрунтування з'єднань GraphQL досить добре: medium.com/p/explaining-graphql-connections-c48b7c3d6976
Helfer

6
де ви знайдете хибні уявлення, це лише коротка інформація, якщо ви знайшли якісь помилки, ви завжди можете вдосконалити їх, щоб покращити
p0k8_

Чи можу я працювати з цими конструкціями через графічний інтерфейс graphql ? Наприклад hasNextPage , або вони доступні лише через JS з Relay?
Ска

так, ви можете працювати з ними з графічного інтерфейсу користувача за допомогою graphql-relay
p0k8_

а не each node will have a cursor, скоріше each edge will have a cursor, посилайтеся на blog.apollographql.com/…
вітер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.