整合spring-boot与graphQL

在sprint-boot中使用graphQL

简介

graphQL介绍

spring-boot介绍

需求

我们以查询书籍及其作者作为示例来展示graphql的使用

配置

  1. 新建maven工程,并添加spring-boot和graphql的依赖
        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            com.graphql-java
            graphql-spring-boot-starter
            3.10.0
        

        
        
            com.graphql-java
            graphql-java-tools
            4.2.0
        
  1. 定义数据类
    定义Author类:
@Builder
@Data
public class Author {

    private Integer id;
    private String name;
    private Integer age;

}

定义Book类:

@Builder
@Data
public class Book {
    private Integer id;
    private String name;
    private Author author;
    private String publisher;
}
  1. 添加QueryResolver
@Component
public class BookQueryResolver implements GraphQLQueryResolver {
    public List findBooks() {
        Author author = Author.builder()
                .id(1)
                .name("Bill Venners")
                .age(40)
                .build();
        Book b = Book.builder()
                .id(1)
                .name("scala编程第三版")
                .author(author)
                .publisher("电子工业出版社")
                .build();
        List bookList = new ArrayList();
        bookList.add(b);
        return bookList;
    }
}

在BookQueryResolver中我们添加了一个findeBooks方法,这里我们写死了一个Book对象和一个Author对象,实现开发中根据自已的需要来获取数据。

  1. 添加graphql的接口定义
    在resources目录添加root.graphqls和schema.graphqls文件。root.graphqls用于方法的定义,schema.graphqls用于定义可查询数据及字段信息。
    root.graphqls:
type Query {
    findBooks: [Book]
}

schema.graphqls:

type Author {
    id: Int
    name: String
    age: Int
}

type Book {
    id: Int
    name: String
    author: Author
    publisher: String
}
  1. 添加GraphqlApplication用于启动我们的应用
@SpringBootApplication
public class GraphqlApplication {
    public static void main(String [] args ) {
        new SpringApplication(GraphqlApplication.class).run(args);
    }
}
  1. 启动程序
    当我们在spring-boot的启动日志里看到/graphql/*这样的访问路径时,说明我们的graphql已经成功添加,如下图所示


    graphql.jpg
  2. 添加图形化工具
    图形化工具不是必需的,但是在我们的开发过程中,却提供了很好的便利性,图形工具的添加很简单,在maven中添加如下依赖即可:
        
            com.graphql-java
            graphiql-spring-boot-starter
            3.10.0
        

重新启动应用,然后使用浏览器访问http://localhost:8080/graphiql,如下图:

graphiql.jpg

测试

  1. 我们调用findBooks查询书名和出版社


    graphql-1.jpg
  2. 通过findBooks查询书名和出版社的同时,查询作者名称


    graphql-2.jpg

总结

示例很简单,但graphql确实很好地解决了不同接口对查询字段差异性的要求,而不会产生数据冗余,更多功能还待研究。
示例地址:示例

你可能感兴趣的:(整合spring-boot与graphQL)