Bertrand Delacretaz created SLING-10309:
-------------------------------------------
Summary: 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
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)