Integrating Spring Boot with GraphQL

GraphQL is a modern query language for APIs that provides a more efficient, powerful, and flexible alternative to traditional REST APIs. It allows clients to request only the data they need, leading to reduced over-fetching or under-fetching of data. In this post, we will explore how to integrate GraphQL into a Spring Boot application, setting the foundation for building efficient APIs.

What is GraphQL?

GraphQL was developed by Facebook in 2012 and released as an open-source project in 2015. It provides a way for clients to interact with APIs by allowing them to specify exactly what data they need through queries. Key features of GraphQL include:

  • Single Endpoint: Unlike REST, which often has multiple endpoints, GraphQL exposes a single endpoint for all API interactions.
  • Strongly Typed Schema: GraphQL defines a schema that describes the types, queries, and mutations that can be executed.
  • Real-time Capabilities: With subscriptions, GraphQL can handle real-time data updates.

Setting Up a Spring Boot Application with GraphQL

To get started with GraphQL in a Spring Boot application, you’ll need to add the necessary dependencies.

1. Adding Dependencies

Use the following dependencies in your pom.xml file to integrate GraphQL:

<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-spring-boot-starter</artifactId>
    <version>11.1.0</version>
</dependency>

<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-spring-boot-starter-webmvc</artifactId>
    <version>11.1.0</version>
</dependency>

2. Defining a GraphQL Schema

Create a file called schema.graphqls in the src/main/resources directory. This file will define the types and queries available in your API:

type Query {
    allBooks: [Book]
    book(id: ID!): Book
}

type Book {
    id: ID!
    title: String!
    author: String!
}

3. Creating Model and Repository Classes

Next, create a model class to represent your Book entity:

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
    private String id;
    private String title;
    private String author;
}

For demo purposes, you can create a simple in-memory repository class:

import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;

@Repository
public class BookRepository {
    private List<Book> books = new ArrayList<>();

    public BookRepository() {
        books.add(new Book("1", "1984", "George Orwell"));
        books.add(new Book("2", "The Great Gatsby", "F. Scott Fitzgerald"));
    }

    public List<Book> findAll() {
        return books;
    }

    public Book findById(String id) {
        return books.stream().filter(book -> book.getId().equals(id)).findFirst().orElse(null);
    }
}

4. Creating the GraphQL Resolver

Create a resolver that implements the logic for fetching queries defined in your schema:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import graphql.kickstart.tools.GraphQLQueryResolver;

@Component
public class BookQueryResolver implements GraphQLQueryResolver {

    @Autowired
    private BookRepository bookRepository;

    public List<Book> allBooks() {
        return bookRepository.findAll();
    }

    public Book book(String id) {
        return bookRepository.findById(id);
    }
}

Running the Application

Now you can run your Spring Boot application. Once it’s up and running, you can test the GraphQL endpoint:

http://localhost:8080/graphql

Use a tool like Postman or GraphiQL to send queries:

{ 
    allBooks { 
        id 
        title 
        author 
    } 
}

Conclusion

Integrating GraphQL into your Spring Boot applications can significantly streamline data retrieval and empower front-end developers with the flexibility they need to fetch precisely the data they require. With efficient data fetching capabilities and a strongly typed schema, GraphQL becomes an excellent choice for modern applications.

For more detailed insights and hands-on courses on Spring Boot and GraphQL, check out the valuable resources offered at ITER Academy, helping you deepen your understanding of cutting-edge technologies.

To learn more about ITER Academy, visit our website.

Scroll to Top