记一次GraphQL使用实战

本文详细介绍如何使用SpringBoot集成GraphQL,包括项目搭建、依赖引入、数据源实现、接口定义及可视化测试,为开发者提供了一个从零开始的GraphQL实战指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首发个人博客: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
        }
      }
    ]
  }
}

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

参考
graphql-java 是 GraphQL 的 Java 实现。这个库的目标是用于真实的生产环境。graphql-java 解析和执行查询 GraphQL 。它并不真正获取任何数据的:数据来源于执行回调或提供静态数据。graphql-java 的 "hello world":import graphql.schema.GraphQLObjectType; import graphql.schema.GraphQLSchema; import static graphql.Scalars.GraphQLString; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; public class HelloWorld {     public static void main(String[] args) {         GraphQLObjectType queryType = newObject()                         .name("helloWorldQuery")                         .field(newFieldDefinition()                                 .type(GraphQLString)                                 .name("hello")                                 .staticValue("world")                                 .build())                         .build();         GraphQLSchema schema = GraphQLSchema.newSchema()                         .query(queryType)                         .build();         Map result = new GraphQL(schema).execute("{hello}").getData();         System.out.println(result);         // Prints: {hello=world}     } } 标签:graphql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值