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.