-
Notifications
You must be signed in to change notification settings - Fork 138
Description
Is your feature request related to a problem? Please describe.
When making changes over time to a GraphQL schema, one of them might be adding a new type to an interface.
According to the GraphQL spec this is not considered a breaking change (see https://spec.graphql.org/October2021/#sec-Validation.Type-system-evolution):
Any change that can cause a previously valid request to become invalid is considered a breaking change.
As only a new type was added, all previous queries will still work.
graphql-js in turn "only" registers this as a "potentially dangerous change" (see https://github.com/graphql/graphql-js/blob/bb87e73067865207e19924297cabff45686f2a76/src/utilities/findBreakingChanges.ts#L62).
This all brings me to the conclusion that adding a new type to an existing interface should work also for genqlient.
Describe the solution you'd like
It would be great to allow the deserialization of responses using unknown types.
That could be achieved by using a default struct that just implements the common values of the interface and that is used as a fallback in case the type is unknown.
Optionally this behavior could be enabled/disabled depending on the use-case of the implementation.
Describe alternatives you've considered
The only other option would be to force people updating their applications which may become impossible/very cumbersome if there are a large number of service affected.
Additional context
None