Paginierung ist nie eine einfache Frage und nicht eine explizit gelöst durch GraphQL machen. GraphQL stellt ein Datenabrufframework zur Verfügung. Wie dieses Framework für Dinge verwendet wird (wie Paginierung), liegt beim Entwickler.
Das Team Relay hat versucht, die Paginierung mit der Cursorverbindung specification für GraphQL zu standardisieren. Die Cursor-Verbindungsspezifikation ist nicht für Relay eindeutig und kann mit Angular verwendet werden. Das Hauptziel der Spezifikation besteht darin, eine standardisierte Möglichkeit für die Arbeit mit großen Sammlungen von einem GraphQL-Server bereitzustellen. Die wichtigste Sache, die über diese Spezifikation zu beachten ist, ist, dass mit jedem Objekt ein Cursor verbunden ist. Mit diesem zugeordneten Cursor kann der Client die Seitennumerierung von jedem Punkt in der Sammlung aus fortsetzen.
Wenn Sie an der Implementierung der Relaisspezifikation interessiert sind, empfehle ich Ihnen, Sashko Stubailos Understanding pagination: REST, GraphQL, and Relay zu lesen, wo er die Motivation hinter den Relaisverbindungsspezifikationen erklärt und erklärt, wie sie implementiert werden.
Um die Verbindungsspezifikation in Aktion zu sehen, werfen Sie einen Blick auf das Beispiel SWAPI GraphQL API, das die Relay-Spezifikation in GraphQL implementiert. Ich ermutige Sie, das Dokumentationsfenster zu öffnen und die PeopleConnection
zu durchsuchen. Beachten Sie, wie sie die Felder edges
und people
implementieren.
Wenn die Paginierung des Cursors für die Verwendung/Implementierung zu kompliziert ist, können Sie für Ihre GraphQL-API immer eine herkömmliche Paginierung für Limit/Offset anzeigen. Die Schnittstelle würde wahrscheinlich so etwas wie folgt aussehen:
{
friends(limit: 5, offset: 20) {
name
}
}
Schließlich ist die Abfrage, die Sie von einem sehr frühen technische Vorschau von GraphQL vorgesehen ist und eigentlich nicht der Spezifikation (source) entsprechen. Eine entsprechende Abfrage (wie von Hafiz erwähnt) wäre:
{
friends(first: 1) {
cursor
node {
name
}
}
}
Es gibt zwei große Gespräche von React Europe 2015, die ich empfehlen Sie auch beobachten, die mehr über GraphQL ohne Relais sprechen.
Seitenzahlen sind nicht Teil der GraphQL Spezifikation, aber es ist ein Teil der Relais-Bibliothek als [Verbindungen] (https://facebook.github.io/relay/docs/ graphql-connections.html). Sie können Paginierungen ohne Relay implementieren, indem Sie Eingabeargumente für Ihre GraphQL-Objekte definieren. Btw, die Beispiel-GraphQL-Abfrage, die Sie haben, scheint ein bisschen wackelig. Es sollte 'friends (first: 1) {cursor, node {name}}' sein, wobei 'friends' das' first' Eingabeargument vom Typ GraphQLInt akzeptiert. Ich werde versuchen, Zeit zu finden, um ein Beispiel für die Seitennummerierung für "graphql-go" zu erstellen. Es scheint, als wäre es für viele Leute sehr nützlich. –
Ich habe meine Kommentare hier https://github.com/graphql-go/graphql/issues/120 ausgearbeitet –