Get ahead
VMware offers training and certification to turbo-charge your progress.
Learn moreOn behalf of the Spring for GraphQL team, I am pleased to announce the availability of our first 1.3 milestone. The release includes a number of new features described in this post.
GraphQlClient provides a common workflow for GraphQL requests over any transport including HTTP, WebSocket, and RSocket. Following the availability of Project Loom in Java 21, and a new synchronous RestClient in Spring Framework 6.1, we've now added the option to use GraphQlClient on a blocking stack, and to use a synchronous API. See the reference docs for details on how to create GraphQlClient with a RestClient-based transport.
GraphQlClient continues to be a common API over blocking and non-blocking transports, now also offering a choice of synchronous vs asynchronous usage. This means at build time you choose whether to run on blocking or non-blocking transport, and at runtime you retain the choice to perform requests synchronously or asynchronously.
To perform GraphQL requests, you need to provide the GraphQL operation as text, a String literal or loaded from a document file. Alternatively, DGS Codegen can generate a Java client API to define requests. We've now added a new DgsGraphQlClient that makes it easy to use DGS code generated classes.
DgsGraphQlClient is a thin wrapper around any GraphQlClient. It provides a dedicated workflow to define the request, but otherwise uses GraphQlClient to perform requests, and exposes the same API to handle the response.
See reference docs for details. In addition Spring Initializer supports creating Spring GraphQL projects with DGS codegen enabled.
We now provide support for handling GraphQL subscription requests over SSE with Spring MVC and WebFlux based on the GraphQL over SSE spec. See the reference docs for details.
On the client side, HttpGraphQlClient now supports GraphQL subscriptions over SSE.
When a federated GraphQL service starts, it needs to initialize the GraphQLSchema through the federation-jvm library to add support for federation directives, and to handle requests for federated entities types.
We now provide FederationSchemaFactory to perform this configuration step. The factory detects @EntityMapping controller methods that you can use to load federated entity types. Such methods can use @Argument annotated method parameters to access entity id values with type conversion. They can execute synchronously or asynchronously. They can also have exceptions resolved via @GraphQlExceptionHandler methods resolved to GraphQLErrors.
For details see the reference docs.
Last but not least, we have collaborated with the DGS team on a common foundation for Spring GraphQL applications. You can read a summary of the effort. As a result there is a new integration in the DGS Framework that's being finalized, and there have been a number of important updates in the Spring for GraphQL 1.2.5 release that enable the integration, for the benefit of all Spring for GraphQL applications. We thank the DGS team and look forward to our continued collaboration!
Please, give the 1.3 M1 release a try via https://repo.404ofchina.website/milestone, and provide us with feedback at our issue tracker!