GraphQL是一种用于API的查询语言,它供给了一种愈加灵敏、高效的方法来界说和查询API。在本文中,咱们将介绍怎么运用Spring Boot和GraphQL来构建灵敏的API服务。

什么是GraphQL?

GraphQL是一种由Facebook开发的查询语言,它供给了一种愈加灵敏、高效的方法来界说和查询API。与传统的RESTful API不同,GraphQL答应客户端精确地指定需求回来的数据,从而避免了不必要的数据传输和处理。

GraphQL的查询语言十分简洁明了,它运用相似JSON的语法来描绘数据的结构和查询方法。例如,下面是一个查询GitHub上的用户信息的GraphQL查询:

{
  user(login: "octocat") {
    name
    email
    repositories(first: 10) {
      nodes {
        name
        description
      }
    }
  }
}

这个查询恳求GitHub API回来一个名为octocat的用户的名字、电子邮件地址和前10个代码库的称号和描绘。

运用Spring Boot和GraphQL构建API服务

Spring Boot是一个十分流行的Java框架,它供给了一种快速、简略的方法来构建Web应用程序。Spring Boot还供给了对GraphQL的支撑,使得咱们能够运用Spring Boot来构建灵敏的API服务。

增加依赖

首要,咱们需求增加Spring Boot对GraphQL的支撑。在pom.xml文件中增加以下依赖:

<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-spring-boot-starter</artifactId>
    <version>11.0.0</version>
</dependency>
<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphiql-spring-boot-starter</artifactId>
    <version>11.0.0</version>
    <scope>runtime</scope>
</dependency>

这些依赖将为咱们供给GraphQL的中心功用和GraphiQL东西,GraphiQL是一个用于测验和调试GraphQL API的Web界面。

界说数据模型

接下来,咱们需求界说咱们的数据模型。在本文中,咱们将运用一个简略的数据模型,表示一个图书和它的作者:

public class Book {
    private Long id;
    private String title;
    private Author author;
    // getters and setters
}
public class Author {
    private Long id;
    private String name;
    // getters and setters
}

界说GraphQL Schema

GraphQL的中心是Schema,它界说了API的类型和查询方法。咱们需求界说一个GraphQL Schema来描绘咱们的API。

在本文中,咱们将运用GraphQL Java Tools来界说Schema。在pom.xml文件中增加以下依赖:

<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-java-tools</artifactId>
    <version>5.10.0</version>
</dependency>

然后,咱们能够界说一个GraphQL Schema,如下所示:

@Configuration
public class GraphQLConfig {
    @Bean
    public GraphQLSchema schema() {
        return new GraphQLSchemaGenerator()
                .withOperationsFromSingleton(new BookService())
                .generate();
    }
}

这个Schema运用了一个名为BookService的单例目标来界说查询和类型。咱们将在下一节中界说这个服务。

界说GraphQL服务

现在,咱们需求界说一个GraphQL服务来处理查询恳求。咱们能够运用GraphQL Java Tools供给的GraphQLServlet来处理恳求。

首要,咱们需求界说一个GraphQL查询服务,如下所示:

@Service
public class BookService {
    private List<Book> books = Arrays.asList(
            new Book(1L, "The Hitchhiker's Guide to the Galaxy", new Author(1L, "Douglas Adams")),
            new Book(2L, "The Restaurant at the End of the Universe", new Author(1L, "Douglas Adams")),
            new Book(3L, "Life, the Universe and Everything", new Author(1L, "Douglas Adams")),
            new Book(4L, "So Long, and Thanks for All the Fish", new Author(1L, "Douglas Adams")),
            new Book(5L, "Mostly Harmless", new Author(1L, "Douglas Adams"))
    );
    public List<Book> getBooks() {
        return books;
    }
    public Book getBookById(Long id) {
        return books.stream()
                .filter(book -> book.getId().equals(id))
                .findFirst()
                .orElse(null);
    }
}

这个服务供给了两个查询方法:getBooks()和getBookById()。getBooks()回来一切的图书,getBookById()依据ID回来指定的图书。

接下来,咱们需求界说一个GraphQLServlet来处理恳求。在Spring Boot中,咱们能够运用以下代码来界说GraphQLServlet:

@WebServlet(urlPatterns = "/graphql")
public class GraphQLServlet extends SimpleGraphQLHttpServlet {
    public GraphQLServlet(GraphQLSchema schema) {
        super(schema);
    }
}

这个Servlet运用咱们在前面界说的GraphQL Schema来处理恳求。

最终,咱们需求将GraphQLServlet注册到Spring Boot中。咱们能够运用以下代码来完结注册:

@Configuration
public class WebConfig {
    @Bean
    public ServletRegistrationBean<GraphQLServlet> graphQLServletRegistrationBean(GraphQLSchema schema) {
        ServletRegistrationBean<GraphQLServlet> bean = new ServletRegistrationBean<>(new GraphQLServlet(schema), "/graphql");
        bean.setLoadOnStartup(1);
        return bean;
    }
}

这个装备将GraphQLServlet注册到Spring Boot中,并将它映射到路径“/graphql”。

测验GraphQL API

现在,咱们现已完结了GraphQL API的构建。咱们能够运用GraphiQL东西来测验和调试API。

浏览器中打开http://localhost:8080/graphiql,就能够进入GraphiQL界面。在左侧的查询窗口中输入以下查询:

{
  books {
    id
    title
    author {
      name
    }
  }
}

这个查询恳求回来一切的图书,包含它们的ID、标题和作者的名字。

咱们也能够依据ID查询指定的图书。在查询窗口中输入以下查询:

{
  book(id: 1) {
    id
    title
    author {
      name
    }
  }
}

这个查询恳求回来ID为1的图书的详细信息。

总结

在本文中,咱们介绍了怎么运用Spring Boot和GraphQL来构建灵敏的API服务。咱们首要介绍了GraphQL的基本概念和语法,然后演示了怎么运用Spring Boot和GraphQL Java Tools来界说Schema和查询服务。最终,咱们运用GraphiQL东西测验了API的功用。

GraphQL是一个十分强大和灵敏的API查询语言,它能够帮助咱们构建高效、灵敏的API服务。如果您正在寻觅一种愈加现代化和高效的API开发方法,那么GraphQL是一个十分不错的挑选。