Moins de deux ans après sa création, Spring for GraphQL 1.0 est sorti.
Le projet intègre Spring et GraphQL Java et a été développé en collaboration entre les deux équipes.
GraphQL est un langage de requête et de manipulation de données open source pour les API, et un environnement d'exécution pour répondre aux requêtes avec des données existantes. Il a été développé par Facebook et rendu public en 2015.
GraphQL permet aux clients de définir la structure des données requises, et la même structure des données est renvoyée par le serveur, empêchant ainsi le renvoi de quantités excessives de données.
Spring pour GraphQL peut être configuré à l'aide de Spring Initalizr en ajoutant simplement la dépendance dans Spring Boot 2.7 graphql-spring-boot-starter dans le récemment publié. InfoQ suivra avec une nouvelle plus détaillée sur Spring Boot 2.7.0.
Spring for GraphQL prend en charge la gestion des requêtes GraphQL via HTTP, WebSocket et RSocket à la fois côté client et côté serveur.
Spring for GraphQL simplifie le développement d'un projet GraphQL car : il permet le chargement automatique des fichiers de schéma à partir d'un emplacement configurable ; fournit un modèle de programmation basé sur des annotations ; enregistre un DataFetcherExceptionHandler pour gérer les exceptions ; et configure les métriques pour GraphQL.
Dans l'exemple ci-dessous, Spring lie la méthode à une requête et utilise le RuntimeWiring.Builder pour enregistrer la méthode gestionnaire ci-dessus en tant que DataFetcher pour la requête nommée "hello".
@Controller
public class GreetingController {
@QueryMapping
public String hello() {
return "Hello, world!";
}
}
Il est également possible de spécifier le nom du type parent et le nom du champ en utilisant simplement @SchemaMapping(typeName="Book", field="author") comme dans l'exemple ci-dessous :
@Controller
public class BookController {
@SchemaMapping(typeName="Book", field="author")
public Author getAuthor(Book book) {
// ...
}
}
Le chargement par lots est pris en charge grâce à l'utilisation d'un DataLoader pour différer le chargement des instances d'entité individuelles.
Spring for GraphQL exploite également la technologie Spring existante pour exposer les sources de données sous-jacentes via GraphQL. Il prend en charge l'utilisation de Querydsl et Query by Example sur des référentiels pour récupérer les données dans un DataFetcher.
En utilisant le code ci-dessous, il est possible de créer un DataFetcher qui peut être enregistré via un RuntimeWiringConfigurer.
// For single result queries
DataFetcher<Account> dataFetcher = QuerydslDataFetcher.builder(repository).single();
// For multi-result queries
DataFetcher<Iterable<Account>> dataFetcher = QuerydslDataFetcher.builder(repository).many();
Le DataFetcher construit un prédicat Querydsl à partir des paramètres de requête GraphQL et l'utilise pour récupérer des données.
Avec l'ajout d'annotations Spring Security, telles que @PreAuthorize ou @Secured, il est possible d'appliquer une sécurité fine en vérifiant l'autorisation des méthodes récupérant les données pour des parties spécifiques de la réponse GraphQL.
Côté client, les demandes d'interception et d'abonnement sont prises en charge. Actuellement, seul le transport WebSocket prend en charge les flux GraphQL.
Encore à ses balbutiements, Spring for GraphQL évoluera très probablement avec de nouvelles fonctionnalités et des corrections de bugs, et pourrait devenir une alternative au populaire framework DGS, développé chez Netflix au cours des trois dernières années.