Was bedeuten in GraphQL "Kanten" und "Knoten"?


100

Ich verwende einen bestimmten GraphQL-Endpunkt und obwohl ich eine saubere JSON-Struktur als Abfrage bereitstelle, erhalte ich beim Erhalten der Ergebnisse "Kanten" - und "Knoten" -Tags. Es scheint, als ob es meine Daten ohne offensichtlichen Nutzen verschmutzt. Warum ist es dort und ist es möglich, diese für eine schnellere und einfachere Analyse von Daten zu entfernen?


1
Verbindungen, Kanten und Knoten ist eine Terminologie, die hauptsächlich im Kontext von Relay, dem GraphQL-Client, verwendet wird. Weitere Informationen finden Sie in diesen FAQ .
— Uhr

2
Nur zur Verdeutlichung: Verbindungen sind keine relais-spezifische Sache. Ausführliche Informationen finden
— Helfer

Es ist eine Art Standardmethode, um Paging für lange Ergebnislisten bereitzustellen. Nicht an eine Implementierung gebunden.
— Matt

Antworten:


63

Beginnen wir mit einer kurzen Einführung in einfachen Worten


GraphQl-Relaisspezifikationen

  • Mechanismus zum erneuten Abrufen eines Objekts
  • Beschreibung, wie man durch Verbindungen blättert
  • Struktur um Mutationen, um sie vorhersehbar zu machen

Verbindungen:

  • eine Verbindung ist eine Sammlung von Objekten mit Metadaten wie edges, pageInfo...
  • Seiteninfo enthält hasNextPage, hasPreviousPage, startCursor,endCursor

    • hasNextPage wird uns mitteilen, ob mehr Kanten verfügbar sind oder ob wir das Ende dieser Verbindung erreicht haben.
  • Das Array von Datensätzen: Kanten

    • Kanten bieten Ihnen Flexibilität bei der Verwendung Ihrer Daten (Knoten)
    • Kanten helfen Ihnen bei der Paginierung. Es gibt graphql, GraphQLListaber ohne Funktionalität wie Paginierung, nur mit Array von Objekten (Daten).
  • Jede Kante hat

    • a node: ein Datensatz oder Daten
    • a cursor: Base64-codierte Zeichenfolge zur Unterstützung der Weiterleitung bei der Paginierung

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

Knoten:

  • Mit dem Relais können Sie die Anzahl der Knoten festlegen, die angezeigt werden sollen connectionArgs(first, last, after, before)

Relais-Paginierung funktioniert als

  • Ruft alle Objekte in der Sammlung ab und gibt ein Slice zurück, das auf den first/lastx-Datensätzen basiert , die über connectionArgs verwendet werden

  • after/before werden verwendet, um dem GraphQL-Server die Anzahl der erforderlichen Slice (Daten) mithilfe des Cursors vom Knoten anzuzeigen

Es gibt viele weitere Dinge zu beachten , wie nodeDefinitions, globalFieldId,nodeInterfaces

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


16
Ich denke, diese Antwort hat das Wesentliche, aber sie enthält viele Missverständnisse. Dieser Artikel erklärt die Gründe für GraphQL-Verbindungen ziemlich gut: medium.com/p/explaining-graphql-connections-c48b7c3d6976
— Helfer

6
Wo finden Sie die Missverständnisse, es sind nur die kurzen Informationen. Wenn Sie Missverständnisse gefunden haben, können Sie diese jederzeit verbessern, um sie zu verbessern
— p0k8_

Kann ich mit diesen Konstrukten über die grafische Benutzeroberfläche arbeiten? Zum Beispiel hasNextPage oder sind sie nur über JS mit Relay verfügbar?
— Ska

Ja, Sie können diese über die Grafik-Benutzeroberfläche mit GraphQL-Relay
— bearbeiten

nicht each node will have a cursor, sondern each edge will have a cursorverweist, dass blog.apollographql.com/...
— Wind
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.