I'm thinking about adding GraphQL functionalities to my Spring Boot application.
I found there are two artifacts for that.
One is com.graphql-java-kickstart:graphql-spring-boot-starter
and the other is com.graphql-java:graphql-spring-boot-starter
.
Which one should I choose?
These are different Starters (by different teams) providing different features, so there's no right or wrong answer. Here's a quick overview of what I'm aware is available:
The original starter made by the graphql-java team (com.graphql-java:graphql-spring-boot-starter
) is now, I believe, defunct and superseded by the Spring GraphQL.
Spring GraphQL (org.springframework.boot:spring-boot-starter-web
or org.springframework.boot:spring-boot-starter-webflux
) is intended for schema-first development, is easy to use and works well with other Spring projects (like e.g. WebFlux and Spring Security).
DGS by Netflix (com.netflix.graphql.dgs:graphql-dgs-spring-boot-starter
) has also been folded into Spring GraphQL.
If you want to go code-first (which I argue is still schema-first, just better), use graphql-spqr-spring-boot-starter
, which will generate the GraphQL schema and an end-point for you, with no extra code needed. It's the quickest way possible to expose Spring services. There's a sample project here. I'm the main author of that project, so this is a shameless plug, but I honestly believe it's lightyears ahead of other projects in terms of usability. The next version will be based on Spring GraphQL, so it should inherit most/all benefits as well (like e.g. RSocket support, which it currently lacks).
If you're already using graphql-java-tools
(maintained by the Kickstart team), you'll likely want to go for com.graphql-java-kickstart:graphql-spring-boot-starter
as they're intended to be used together. I have no clue how actively this project is maintained these days.