github graphql-java/graphql-java v17.0-beta1
17.0-beta1

latest releases: v22.0, v21.5, v20.9...
2 years ago

An initial beta 1 release of 17.0.

We consider this production ready, but we are seeking feedback from early adopters, therefor the beta1 release.

https://github.com/graphql-java/graphql-java/milestone/31?closed=1

@deprecated supported on input fields

In line with coming graphql spec changes, the @deprecated annotation can now be placed on input fields and not just output fields as before.

#2186

Dramatic performance improvements in GraphQLSchema building

The GraphQLSchema is a graph of types and as such has to be built according to strict rules. The previous code would repeated visit and rebuilt the schema and this meant that large schemes could be slow to build.

This code has been extensively benchmarked and improved. For example on a very large and complex schema, total build time went from 3.5 seconds to 1.2 seconds.

Thank you to teams out there that used https://github.com/graphql-java/graphql-anonymizer to submit in real life schemas that we can test with.

Dramatic performance improvements in DataFetchingFieldSelectionSet

The classes that underlie the DataFetchingFieldSelectionSet code have been been remodelled to be dramatically more performant. Before interfaces could create an exponential explosion in objects created. This has been fixed which in turn improves the performance of this code as scale.

Upgrade to DataLoader 3.x

https://github.com/graphql-java/java-dataloader has been upgraded to the new 3.0.1 version which adds new capabilities on external value caching.

Support of directives on fields and types during introspection

#2221 this is a non spec feature which lets you expose directives through Introspection

Reworked default value validation and improved Scalar coercion

#2325 This is a relatively big change which fixed up how default values are processed. Before that default values were never validated and custom Scalars could cause invalid values printed in SDL or Introspection. This PR includes a new Scalar coercion function valueToLiteral which is needed to implement this correct behaviour.

Better Unicode support in documents

#2404 allows for better Unicode expression in queries and SDL documents

GraphQLContext is now the approved context mechanism

#2368 allows for a well known API for context within a graphql request. Previously any opaque object could be used and framework could was not able to make any assumptions about adding their own context properties

The old mechanism has been deprecated and a singleton (buy mutable) context object is now how context is passed around.

Ignored characters are no longer help in memory by default

Characters in a graphql document that are not significant to the syntax, such as spaces, new lines and comms, used to be captured in memory against AST nodes.

This is no longer the case and it saves memory from parsed documents. There is a switch to turn on the old behavior intended for tooling code.

#2394

Exception handlers can now be asychronous

graphql-java operates in a asynchronous world and hence the code that handles exceptions in data fetchers should itself allow asynchronous handling.

#2371

Breaking changes

https://github.com/graphql-java/graphql-java/pulls?q=is%3Apr+label%3A%22breaking+change%22++milestone%3A%2217.0%22

  • The boolean values acceptable as variable input the Boolean scalar have been tightened to true and false - see #2419

  • The non standard @Fetch directive support has been removed by default and deprecated. This was done for performance reasons because very few people used it but it slowed down schema creation a lot

  • The new DataLoader upgrade has changed the signature of the future cache to be more correct.

  • The long deprecated BatchedExecutionStrategy and ExecutorServiceExecutionStrategy have finally been removed

Don't miss a new graphql-java release

NewReleases is sending notifications on new releases.