Comments (3)
Does relay support pagination when the size of the collection is unknown? ie sometimes it is expensive to know the exact size of a collection or just needed from a product perspective. Like search results.
Yes, and the Facebook newsfeed (which you mentioned) is another good example of this kind of case. Not only is it unbounded (for most intents and purposes), but the ordering is dependent on ranking that is highly sensitive to changing inputs over time, such as new items becoming available.
For cases like this, implementing your own connection logic is probably the way to go, and the data store from which the data is coming from need not be (and probably isn't) very array-like. Given the ever-changing nature of the beast, cursors are critically important, so that you can paginate through that kind of collection in a stable way (ie. without stuff getting reordered or repeated underneath you) because the cursor contains enough information to describe the set and ordering that you're paging through.
from graphql-relay-js.
Thanks for your answer. Very useful.
That totally makes sense.
Ok then in the case of Facebook newsfeed, since the 'last' arg does not make sense by itself, how does the server handle this if a relay client ask for newsfeed(last: 10) {...} ? Is it defined by the spec? Or is it just the responsibility of the relay client (and hence the implementor) not to issue a query like this?
I guess my question could be generalized to most graphql spec extensions. Is there any way to describe in graphql that only some extension (or part of it) is supported? Any tool that exists (or may exist in the future) to verify the compliance with an extension?
Thanks!
from graphql-relay-js.
Closing out some old issues, but before I do:
Ok then in the case of Facebook newsfeed, since the 'last' arg does not make sense by itself, how does the server handle this if a relay client ask for newsfeed(last: 10) {...} ? Is it defined by the spec?
It's not defined by the spec, and I have no idea what the server does (I can issue such a query and it dutifully returns me a set of items, but exactly how it chose them is inscrutable to me).
In general I don't think this is enforceable in the type system or the spec, but there is a tacit pact here that the server will give the client a "reasonable" for response for a "reasonable" query; if the client asks for something "unreasonable", then all bets are off.
I guess my question could be generalized to most graphql spec extensions. Is there any way to describe in graphql that only some extension (or part of it) is supported? Any tool that exists (or may exist in the future) to verify the compliance with an extension?
Great question! If you find out about such a tool or build anything, please share it. We certainly do some custom validations on our own schema and queries, which is one way to verify that things are legit (at least within the bounds of what is expressible in the GraphQL type system).
from graphql-relay-js.
Related Issues (20)
- Update master to main HOT 1
- Build error in ./resources/prepublish.sh
- New release? HOT 6
- Return type check problem of mutationWithClientMutationId after 0.7.0 update HOT 3
- Is the peer dependency on graphql exactly 15.5.1 on purpose? HOT 3
- RangeError: Invalid code point HOT 2
- Are filtering operators supported? HOT 1
- isPromise is not a function HOT 3
- Add support for `graphql@v16`
- Can I return a union type on `outputFields`?
- Does anyone use this package with their Nest.js server?
- Merge the `graphql-relay-subcription` into `graphql-relay-js`? HOT 1
- Migrate from `chai` to `jest`?
- 0.10.0 connections causing compile error HOT 3
- To use this plugin is it necessary to get all records from the database with one request?
- filters connectionFromArray HOT 1
- Export pageInfoType
- 0.10.0 has no Flow type support HOT 4
- Make fields on PageInfo type shareable
- Compile error: 'NotSupportedTSVersion.d.ts' is not a module. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graphql-relay-js.