subql
subql copied to clipboard
Expose more of the schema in gql subscriptions
Prerequisites
- [x] Are you running the latest version(s)?
- [x] Have you searched the documentation for your issue?
- [x] Did you search for an existing issue or pull request?
Description
GraphQL subscriptions payload doesn't allow to traverse the data graph
Details
Currently, subscriptions payload only contains an id, mutation_type and _entity, the latest being a JSON field. This makes it hard to manage data on the client side and get full advantage of the apollo cache: apollo can't update the cached data automatically because of the missing __typename in _entity and we have no way to fetch relations as well. A more useful approach would be to have different payload types depending on the subscription, allowing to query deeper the entity being inserted/updated/deleted.
Another solution might be to expose the said entity under the Nodeinterface: this way the payload type is still the same for all subscriptions, but we can query the actual data & resolvers through a fragment inside the node.
Both way, apollo client cache would be correctly updated just by receiving the subscription, eliminating a lot of glue code and refetches on the client side (specially when working with paginated data)
Its not a complete solution but this PR makes the entity type correct and it will now provide the __typename https://github.com/subquery/subql/pull/2600
Thank you ! The PR already makes it really easier to manage updates for simple cases, I'm leaving this open since from what i see nested data are always set to null but definitely a great improvement 🎉
Also the switch to graphql-ws & graphiql is greatly appreciated 🙌
Also, it looks like entity fields with a camelCase name are always null :/