[
https://issues.apache.org/jira/browse/SLING-10309?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17341996#comment-17341996
]
Bertrand Delacretaz commented on SLING-10309:
---------------------------------------------
I've pushed a
[commit|https://github.com/apache/sling-org-apache-sling-graphql-core/commit/189fc7f8ed55b1c29b6ae282ae27f1ff44856b5d]
to the new {{SLING-10309/experiment}} branch, which uses the graphql.relay
interfaces to generate paginated results as per
https://relay.dev/graphql/connections.htm
It's just a quick hack but demonstrates that using the results introspection
features of graphql-java, we just need to provide results using the appropriate
interfaces to get the correct results schema,
So I think we need two things, which might be provided by the
{{RelayConnectionFactory}} mentioned above, but not necessarily as that's not
too complicated (Famous Last Words):
* Interfaces that help the developers provide paginated data from
{{SlingDataFetcher}} services
* Ideally a way to generate the pagination part of the schemas based on a
suitable schema directive. For my quick hack I added those pagination parts
manually.
> 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)