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/graphqlThe 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