Reactive GraphQL client for consuming GraphQL APIs from a Spring Boot application. Provides OAuth2 authorization through configuration.
Add the starter to your project.
When using Maven:
<dependency>
<groupId>com.graphql-java-kickstart</groupId>
<artifactId>graphql-webclient-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
When using gradle:
implementation "com.graphql-java-kickstart:graphql-webclient-spring-boot-starter:2.0.0"
Configure at least the URL of the GraphQL API to consume:
graphql:
client:
url: https://graphql.github.com/graphql
The starter creates a Spring bean of type GraphQLWebClient
that you can use in your
classes to send queries. A simplified example might look like this:
@Component
class MyClass {
private final GraphQLWebClient graphQLWebClient;
MyClass(GraphQLWebClient graphQLWebClient) {
this.graphQLWebClient = graphQLWebClient;
}
String helloWorld() {
GraphQLRequest request = GraphQLRequest.builder().query("query { hello }").build();
GraphQLResponse response = graphQLWebClient.post(request).block();
return response.get("hello", String.class);
}
}
You can use the latest Snapshots by configuring the Snapshot repository, see https://graphql-java-kickstart.github.io/servlet/#using-the-latest-development-build.
The following tables list the configurable properties of the GraphQL Spring Webclient and their default values.
These properties are configured with the prefix graphql.client
, e.g. the property listed in the table as url
should be defined as graphql.client.url
in your Spring Boot configuration files.
Property | Description |
---|---|
url |
Full URL of the GraphQL API to connect to, e.g. https://graphql.github.com/graphql |
oauth2.client-id |
OAuth2 client id |
oauth2.client-secret |
OAuth2 client secret |
oauth2.token-uri |
Token URI of the identity provider |
oauth2.authorization-grant-type |
By default the grant type client_credentials is used |
retry.strategy |
The retry strategy to auto configure for the WebClient (possible values are none , backoff , fixed_delay , indefinitely , max and max_in_row ). Default is none . |
retry.backoff.max-attempts |
The maximum number of retry attempts to allow (only used when retry.strategy = backoff ). |
retry.backoff.min-backoff |
The minimum duration for the first backoff (only used when retry.strategy = backoff ). Default is 0 . |
retry.backoff.max-backoff |
The maximum duration for the exponential backoffs (only used when retry.strategy = backoff ). Default is Duration.ofMillis(Long.MAX_VALUE) . |
retry.fixed-delay.max-attempts |
The maximum number of retry attempts to allow (only used when retry.strategy = fixed_delay ). |
retry.fixed-delay.delay |
The duration of the fixed delays between attempts (only used when retry.strategy = fixed_delay ). |
retry.max.max-attempts |
The maximum number of retry attempts to allow (only used when retry.strategy = max ). |
retry.max-in-row.max-attempts |
The maximum number of retry attempts to allow in a row (only used when retry.strategy = max_in_row ). |
In case you need to work with large responses you might run into the following error:
Exceeded limit on max bytes to buffer : 262144
In that case starting with version 0.1.2 you can use the default Spring Boot configuration property to configure the max in memory size to use:
spring.codec.max-in-memory-size=10MB