GraphQL 学习笔记

一 GraphQL 是什么

 官网点我

看官网怎么说?

 

二 我们用它做什么

公司有个需求:根据多组API数据源,集成为一条结果集。输出给前端进行展示出来。

基于这样的需求背景。我们考虑了使用RESTFul的方式,请求多个API ,然后再进行数据组装。但同时,也发现了GraphQL这个工具语言。它的特点有:请求你所要的数据不多不少;获取多个资源,只用一个请求;描述所有的可能,类型系统。

三 来试试怎么用

这里我们以Springboot 集成GraphQL的方式实现

3.1 新建Spring boot项目。引入依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

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

        <dependency>
            <groupId>com.graphql-java</groupId>
            <artifactId>graphql-spring-boot-starter</artifactId>
            <version>3.10.0</version>
        </dependency>
        <dependency>
            <groupId>com.graphql-java</groupId>
            <artifactId>graphql-java</artifactId>
            <version>2019-10-31T04-37-48-0919e71</version>
        </dependency>
        <!-- 图形化界面graphiql-spring-boot-starter -->
        <dependency>
            <groupId>com.graphql-java-kickstart</groupId>
            <artifactId>graphiql-spring-boot-starter</artifactId>
            <version>5.10.0</version>
        </dependency>

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

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
        </dependency>

    </dependencies>

3.2 创建解析器

注意:这里解析器的方法名和输入参数,要和你定义在schema.graphqls里的方法类型和参数名相同。
@Component
@AllArgsConstructor
@Slf4j
public class BookQueryResolver implements GraphQLQueryResolver {

    private static final String URL= "http://localhost:8080/getData";

    /**
     * 这里传入外部API的请求路径,根据id从外部API获取数据源
     * 填充数据
     * @return
     */
    public Book findBooks(String id){
        return HttpClintUtil.doGet(URL, id);
    }

}

3.3 创建schema.graphqls文件,编写schmea文件

编写语法指南: https://www.prisma.io/blog/graphql-sdl-schema-definition-language-6755bcb9ce51

前端语法速查表: http://caibaojian.com/scb/graphql.html

解释:
Query 表示为查询
方法的入参要对应字段名和字段类型。
返回类型也要按照类型对应
type Query {
    findBooks(id: String!): Book
}

type Book {
    id: String
    name: String
    pageCount: String
    authorId: String
}

3.4 controller调用

@RestController
public class BookController {

    @Autowired
    BookQueryResolver bookQueryResolver;

    @GetMapping("getData")
    public Book findBooks(@RequestParam("id") String id){
        return bookQueryResolver.findBooks(id);
    }
}

3.5 测试

原文地址:https://www.cnblogs.com/Edward-Wang/p/13671825.html