开发实践|手把手教你如何使用API新宠GraphQL

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者、腾讯云TDP-KOL、ACDU成员、墨天轮技术专家博主
🔥 三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~

在这里插入图片描述

引言

上一篇熟悉了API架构风格GraphQL API和RESTful API,这一篇结合Spring集成GraphQL来实践下,深度剖析下。上一篇的链接:《开发实践|API新宠GraphQL浅谈》。
在这里插入图片描述

前期准备

** 开发工具** :IDEA(或者VS code都是可以的)、Postman、浏览器。
** 运行环境** :如果需要执行GraphQL,JDK的版本必须为 JDK 17+
** 仓库管理** :Gradle 7.5+ or Maven 3.5+ 。

如何构建GraphQL

大多数Spring入门指南一样,可以从头开始并完成每个步骤,或者您可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会获得工作代码。
● 使用Git工具,在Github克隆示例源代码。
● 在Spring.io ,使用 Spring Initializr 方式创建一份源代码。

创建GraphQL集成环境

而我本人更建议学习GraphQL的可以从 Spring Initializr 方式自己创建并下载源代码,下面从 9个步骤 来创建一个GraphQL集成程序。
首先直接访问地址获取配置信息,https://start.spring.io/,请求地址后如下图所示,并按照自己的风格填写信息。
在这里插入图片描述

● 步骤1:选择项目,当前项目为maven项目,在GraphQL中如果使用Github下载,默认为Gradle管理依赖库,我习惯maven,所以此处选择maven。
● 步骤2:选择语言,我熟练Java,所以此处选择Java。如果你熟悉Kotlin或Groovy,也可以选择他们。
● 步骤3:选择合适的Spring Boot版本,GraphQL默认支持的最好选择新版本,因为在GraphQL支持的Java运行环境都要Java 17+。
● 步骤4:填写项目信息,这里就随意填写了。
● 步骤5:选择Spring Boot的jar包项目,可直接运行访问。
● 步骤6:选择Java运行环境,最低为 17+。
● 步骤7:点击 【ADD DEPENDENCIES】从中选择需要的依赖库,主要有 Spring for GraphQL 和 Spring Web依赖。
● 步骤8:当一切都填写完成和选择完成后,选择自动生成代码,此时会按照选择,自动下载代码,代码为.zip的压缩包,需要解压到磁盘的某一处即可。
● 步骤9:此步骤就是在IDEA中导入上面步骤8的项目代码。

IDEA打开GraphQL项目

将代码导入到项目中就是下面的结构。可以看到生成的代码如下:
在这里插入图片描述

IDEA中安装支持插件

可以提前在插件中搜索插件,也可以创建项目文件后根据需要下载安装插件。
1 Lombok插件
如果你机器已经安装了这个插件,可以忽略。
在这里插入图片描述

2 支持Schema模型文件的插件
支持GraphQL的模型文件的后缀名太长,我是记不住—— graphqls,直接安装这个插件就行了,官方提供的。
在这里插入图片描述
在这里插入图片描述

3 Spring 支持的GraphQL插件
在这里插入图片描述

GraphQL代码示例

1 拷贝官网提供的代码
当前为了方便演示,直接从官网下载代码。下载地址为:

https://github.com/spring-guides/gs-graphql-server/tree/main/complete
在这里插入图片描述

将 标注的 1处 和 2处 的文件直接拷贝到项目的对应目录中即可。拷贝后的代码结构如下:
在这里插入图片描述

2 拷贝文件说明
我们从官网拷贝了4个文件,分别是 Author.java、Book.java、BookController.java、schema.graphqls 。
● Book.java:书籍关系对象,定义书籍实体类以及书籍需要的方法。

public record Book (String id, String name, int pageCount, String authorId) {

    private static List<Book> books = Arrays.asList(
        new Book("book-1", "Effective Java", 416, "author-1"),
        new Book("book-2", "Hitchhiker's Guide to the Galaxy", 208, "author-2"),
        new Book("book-3", "Down Under", 436, "author-3")
    );

    public static Book getById(String id) {
        return books.stream()
        .filter(book -> book.id.equals(id))
        .findFirst()
        .orElse(null);
    }
}

● Author.java:作者关系对象,定义书籍作者实体类以及或者作者信息需要的方法。
● BookController.java:控制器,类似RESTful中的controller控制器类功能一样,但有几处不一样。
○ @QueryMapping:查询映射器,例如控制器中的方法为 bookById 需要的参数为 字符串的 id,返回的类型为 Book。
○ @SchemaMapping:实例关系模型映射器。
○ @Argument:接口需要的参数标识。

@Controller
public class BookController {

    @QueryMapping
    public Book bookById(@Argument String id) {
        return Book.getById(id);
    }

    @SchemaMapping
    public Author author(Book book) {
        return Author.getById(book.authorId());
    }
}

● schema.graphqls:最重要的文件,模型映射关系文件。
○ 此文件定义了一个方法,名称为Query的方法,方法名称为bookById,返回值为Book。
○ 对象Book类型为书籍模型信息,其中author为作者对象。
○ 作者Author对象为作者信息,Book对象与Author对象的关联来自上述的 @SchemaMapping注解,可以理解这里是自动获取信息,有些类似我们的下拉列表那种及联获取信息。

type Query {
  bookById(id: ID): Book
}

type Book {
  id: ID
  name: String
  pageCount: Int
  author: Author
}

type Author {
  id: ID
  firstName: String
  lastName: String
}

3 开启UI可视化调试页面
到此,便完成了一个功能的代码编制。如果需要使用GraphQL自带的控制台(UI可视化视图)来测试代码功能,可以在项目的配置文件 application.properties 中增加开启视图即可,默认是false,为关闭状态。

spring.graphql.graphiql.enabled=true

在这里插入图片描述

启动GraphQL

按照启动Spring Boot项目的方式,直接运行 XXXApplication主文件即可启动项目,默认的端口为 8080,默认项目地址为 / ,端点请求地址为 HTTP POST /graphql。
在这里插入图片描述

由于我们在 配置文件开启了 UI 视图,可以直接访问地址

http://localhost:8080/graphiql?path=/graphql

在这里插入图片描述

测试GraphQL

1 UI可视化请求信息
在UI可视化控制台输入查询信息,点击按钮,可以在右侧看到返回的JSON信息。
在这里插入图片描述

这里是有提示的,给我的感觉就是服务端将数据全部暴露出来,客户端可以控制请求参数以及返回信息。下面再展示几个:
在这里插入图片描述
在这里插入图片描述

2 Postman请求信息
由于GraphQL都是使用HTTP的Post方式请求的,所以在Postman中输入地址,然后选择GraphQL方式,按照GraphQL参数方式输入,然后点击 Send 即可看到从服务器返回的数据。
哦

总结

本文主要是从官方案例中使用Spring集成GraphQL,从代码上、代码编写上、启动、测试等,浅谈下GraphQL的运用,不过个人感觉有点一反常态,写习惯了RESTful之后,再来学习GraphQL,的确有些不适应,但是未来在短视频、大流量的加持下,会好的,希望能给更多开发者以帮助。


[引用]

  1. 构建GraphQL服务:https://spring.io/guides/gs/graphql-server#initial
  2. https://spring.io/guides/gs/graphql-server
  3. https://start.spring.io/
  4. https://spring.io/projects/spring-graphql#overview

欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六月暴雪飞梨花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值