Derzeit sehe ich keine vorhandene Unterstützung für die Seitennummerierung in der Bibliothek graphql-java. Es hat einige grundlegende Relay-Unterstützung, wo-in, können wir eine connection
, Facebooks empfohlene Art der Umsetzung Seitennummerierung erstellen.
This ist die Methode, die hilft, das zu erreichen. Aber ohne Dokumentation fällt es mir schwer zu verstehen, wie diese Funktion funktioniert. Kann jemand die Schritte aufschlüsseln, die er ausführen würde, um Paginierungsunterstützung hinzuzufügen, wenn er bereits ein vorhandenes Modell hat, das grundlegende Abfragen wie Add
, delete
, fetch
usw. unter Verwendung der graphql-java-Bibliothek zulässt?GraphQL: Wie Paginierung mit GraphQL-Java implementieren?
Antwort
Sie brauchen nicht einmal Relay-Verbindungen, um die Paginierung zu unterstützen. Ihre Abfrage könnte einfach eine Seitenzahl und Größe (oder Limit/Offset) als Argumente akzeptieren und eine Liste zurückgeben - fertig. Aber wenn Sie Relaisverbindung für z.B. Book
Typ, Sie so etwas wie die folgend tun würden:
Relay relay = new Relay();
GraphQLOutputType book = ...; //build your normal Book object type
GraphQLObjectType bookEdge = relay.edgeType(book.getName(), book, null, Collections.emptyList());
GraphQLObjectType bookConnection = relay.connectionType(book.getName(), bookEdge, Collections.emptyList());
Als Ergebnis würden Sie eine BookConnection
Art haben, die die Relay connection spec entspricht.
Wie für das Beispiel mit grundlegenden GraphQL haben Sie eine einfache Web-App here.
Ich würde Ihnen auch empfehlen, einen Blick auf mein Projekt, graphql-spqr, mit an example app, die Entwicklung von GraphQL APIs tot einfach zu machen.
Zum Beispiel werden Sie ein paginierte Ergebnis wie folgt zu erstellen:
public class BookService {
@GraphQLQuery(name = "books")
//make sure the argument names and types match the Relay spec
public Page<Book> getBooks(@GraphQLArgument(name = "first") int first, @GraphQLArgument(name = "after") String after) {
//if you decide to fetch from a SQL DB, you need the limit and offset instead of a cursor
//so, you can treat "first" as count as "after" as offset
int offset = Integer.valueOf(after);
List<Book> books = getBooksFromDB(first, offset);
Page<Book> bookPage = PageFactory.createOffsetBasedPage(books, totalBookCount, offset);
return bookPage;
}
}
Es gibt viele andere Möglichkeiten, um eine Page
Instanz zu erstellen, ist dies nur die straight-forward ein.
Sie würden dann ein Schema aus Ihrer Java-Klasse generieren:
GraphQLSchema schema = new GraphQLSchemaGenerator()
.withOperationsFromSingleton(new BookService())
.generate();
GraphQL graphQL = GraphQLRuntime.newGraphQL(schema).build();
Und eine Abfrage ausführen:
ExecutionResult result = graphQL.execute("{books(first:10, after:\"20\") {" +
" pageInfo {" +
" hasNextPage" +
" }," +
" edges {" +
" cursor, node {" +
" title" +
"}}}}");
Aber noch einmal, wenn Sie nicht Relay verwenden keine Notwendigkeit gibt es wirklich Dinge zu komplizieren. Wenn Ihr Speicher die cursorbasierte Paginierung natürlich unterstützt, gehen Sie dazu. Wenn dies nicht der Fall ist, verwenden Sie einfach die einfachen Argumente "limit/offset", geben Sie eine Liste zurück und vergessen Sie die Verbindungsspezifikation. Es wurde erstellt, damit Relay Paging in verschiedenen Szenarien automatisch verwalten kann. Es ist also fast immer ein Overkill, wenn Sie Relay nicht verwenden.
- 1. Wie WordPress Paginierung implementieren
- 2. Cursor Paginierung mit Apollo/GraphQL hält mich Fehler
- 3. Implementieren von Codeigniter Standard-Paginierung mit Pjax
- 4. Wie Implementieren eines zusätzlichen Parameters in Grails Paginierung implementieren?
- 5. Graphql Rubin, wie Interface-Typ erstellen und implementieren es
- 6. GraphQL erhalten einen Benutzer mit GraphQL-Tools
- 7. graphql-tester (Komponententests) mit Graphql Apollo Server
- 8. GraphQL __InputValue und „mit der GraphQL Sprache“
- 9. Implementieren Sie Paginierung mit Offset in Java JDBC
- 10. Wie kann ich eine Paginierung im Frühjahr implementieren jdbcTemplate
- 11. Ist es möglich, mehrere Schnittstellen in GraphQL zu implementieren?
- 12. Datenbankkonnektivität mit GraphQL-Java
- 13. Optionale Paginierung mit Spring
- 14. Paginierung mit backbone.js
- 15. Paginierung mit Meteor Pages
- 16. nodejs mit Graphql
- 17. Standardauthentifizierung mit GraphQL
- 18. GraphQL Auflösung mit Versprechen
- 19. GraphQL für Time Series
- 20. graphql-Tools Mit einem GraphQL Server zu verspotten scheint
- 21. GraphQL Login mit Auth0 und Scaphold
- 22. graphql Fehler und Statusmeldungen in graphql-js
- 23. Wie man Graphql mit CORS laufen lässt
- 24. Wie Gewerkschaften verwenden, um mit GraphQL buildSchema
- 25. Wie mutieren verschachteltes Objekt mit graphql
- 26. Wie strukturiere ich authentifizierte Abfragen mit GraphQL?
- 27. Wie Github Graphql API mit Java
- 28. Wie man GraphQL mit MySQL verbindet
- 29. Wie man Paginierung mit Bootstrap
- 30. So implementieren Sie Cursor für die Paginierung in einer API
Wunderbare Antwort! – Scrotch
@ user3728233 Froh, zu helfen :) – kaqqao