[ https://issues.apache.org/jira/browse/SLING-10309?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17342729#comment-17342729 ]
Bertrand Delacretaz commented on SLING-10309: --------------------------------------------- I have now added a {{GenericConnection}} helper class in commit 01bb8e1b, which drastically simplifies the {{SlingDataFetcher}} which implements a paginated query of {{HumanDTO}} objects, as in this example: {code} @Override public @Nullable Connection<HumanDTO> get(@NotNull SlingDataFetcherEnvironment e) throws Exception { final Cursor afterCursor = Cursor.fromEncodedString(e.getArgument("after")); final int limit = e.getArgument("limit", 2); return new GenericConnection<>(humans.iterator(), HumanDTO::getId, afterCursor, limit); } {code} > GraphQL results pagination > -------------------------- > > Key: SLING-10309 > URL: https://issues.apache.org/jira/browse/SLING-10309 > Project: Sling > Issue Type: Improvement > Components: GraphQL > Affects Versions: GraphQL Core 0.0.8 > Reporter: Bertrand Delacretaz > Assignee: Radu Cotescu > Priority: Major > > We need a way to paginate results in the GraphQL Core module. > We did some research with Radu around this, here are our initial findings: > * Pagination should be based on cursors, not offsets. There's a good > explanation of why at > https://uxdesign.cc/why-facebook-says-cursor-pagination-is-the-greatest-d6b98d86b6c0 > * Pagination cursors should be opaque. They are often encoded in Base64 to > express that, although that doesn't make much sense from a technical point of > view (being easy to decode) but helps convey the "consider this thing as > opaque" message. > * https://relay.dev/graphql/connections.htm defines a commonly accepted way > of expressing pagination in GraphQL results. > * Automatically generating the "plurals" types, like Articles for an Article > type, might be interesting and could include adding the required paging > fields. > * https://www.graphql-java-kickstart.com/tools/relay/ mentions the > {{RelayConnectionFactory}} as a useful tool to generate the "standard" paging > information > * The {{SlingDataFetcherEnvironment}} needs to provide paging information > such as the current cursor value and how many items are expected starting > after it > * The "Just the factoids" section of https://api.slack.com/docs/pagination > nicely describes pagination in the Slack API, we should have something like > that to clarify our "pagination pattern" and allow that pattern to be reused > in other parts of Sling if needed. -- This message was sent by Atlassian Jira (v8.3.4#803005)