Khan/genqlient

Supporting backward compatible schemas

Open

#386 aperta il 16 giu 2025

Vedi su GitHub
 (4 commenti) (0 reazioni) (0 assegnatari)Go (141 fork)github user discovery
enhancementhelp wanted

Metriche repository

Star
 (1310 star)
Metriche merge PR
 (Metriche PR in attesa)

Descrizione

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

Guida contributor