记一次GraphQL使用实战

首发个人博客:https://totalo.top/20190611/startGraphQL/

关于GraphQL(官方API: https://graphql.cn/learn/)

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。— 引自GraphQL中文官网(https://graphql.cn/)所得即所想查询

本文以Spring Boot + GraphQL入手介绍

1、首先构建SpringBoot项目,作为web项目引入web依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、引入SpringBoot + GraphQL的相关依赖

<!--整合包 -->
<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphql-spring-boot-starter</artifactId>
    <version>5.0.2</version>
</dependency>
<!--工具包,提供依赖 -->
<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphql-java-tools</artifactId>
    <version>5.2.4</version>
</dependency>
<!-- lombok插件提供@Data、@Builder注解,可以省略构造方法以及get、set方法 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.8</version>
    <scope>provided</scope>
</dependency>
<!-- 可视化调试工具 -->
<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphiql-spring-boot-starter</artifactId>
    <version>5.0.2</version>
</dependency>

3、编写测试代码

Author类:

package com.totalo.graphql.pojo;


import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class Author {
    private Integer id;
    private String name;
    private Integer age;
}

Book类:

package com.totalo.graphql.pojo;


import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class Book {

    private Integer id;
    private String name;
    private Author author;
    private String publisher;
}

QueryResolver作为数据源

package com.totalo.graphql;


import com.coxautodev.graphql.tools.GraphQLQueryResolver;
import com.totalo.graphql.pojo.Author;
import com.totalo.graphql.pojo.Book;
import graphql.schema.GraphQLFieldDefinition;
import graphql.servlet.GraphQLQueryProvider;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class QueryResolver implements GraphQLQueryResolver {

    public List<Book> findBooks() {
        Author author = Author.builder()
                .id(1)
                .name("Bill")
                .age(30)
                .build();
        Book b = Book.builder()
                .id(1)
                .name("Java核心编程")
                .author(author)
                .publisher("电子工业出版社")
                .build();
        List<Book> bookList = new ArrayList<Book>();
        bookList.add(b);
        return bookList;
    }
}

5、添加graphql的接口定义

在resources目录下添加相关的配置文件,在这个项目中,需要配置两个配置文件分别是:root.graphqls这个文件主要是对于方法的定义,schema.graphqls主要是定义可查询的数据以及字段的信息。

root.graphqls

# 查询相关接口
type Query {
    findBooks: [Book]
}
# 变更相关接口
type Mutation {
    ......
}

schema.graphqls

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

type Book {
    id: Int
    name: String
    author: Author
    publisher: String
}

6、启动项目并访问http://localhost:8080/graphiql 进行可视化测试即可。

查询语句

{
  findBooks {
    name
    author{
      name
      age
    }
  }
}

结果显示

{
  "data": {
    "findBooks": [
      {
        "name": "Java核心编程",
        "author": {
          "name": "Bill",
          "age": 30
        }
      }
    ]
  }
}

简单的学习笔记,后续进行更新

参考
全部评论

相关推荐

03-28 19:11
铜陵学院 C++
有礼貌的山羊追赶太阳:太典了,连笔试都没有开始就因为HC满了而结束了,而且还卡你不让你再投其他部门的。
点赞 评论 收藏
分享
ResourceUtilization:四六级不愧是大学最有用的证之一
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务