首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >开发实践|SpringBoot集成API新宠GraphQL实践

开发实践|SpringBoot集成API新宠GraphQL实践

原创
作者头像
六月暴雪飞梨花
修改2024-11-18 19:36:16
修改2024-11-18 19:36:16
1.1K0
举报

好事发生

这里推荐一篇实用的文章:【探索数据结构】线性表之顺序表,作者:【池央】。

这篇文章作者主要讲初步认识了数据结构后,我们一起来探索它的逻辑结构里面的线性结构吧。线性结构是一对一的关系。线性表在逻辑结构上是连续的,在物理结构上不一定是连续的。线性表中的顺序表(本篇的主角)在物理结构上是连续的,而线性表中的链表在物理结构上却是不连续的。


引言

上一篇熟悉了API架构风格GraphQL API和RESTful API,这一篇结合Spring集成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 GraphQLSpring 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.javaBook.javaBookController.javaschema.graphqls

  • Book.java:书籍关系对象,定义书籍实体类以及书籍需要的方法。
代码语言:javascript
复制
//@Data
//@AllArgsConstructor
//@NoArgsConstructor
public record Book (String id, String name, int pageCount, String authorId) {

    //    private String id;
    //    private String name;
    //    private int pageCount;
    //    private 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:接口需要的参数标识。
代码语言:javascript
复制
@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注解,可以理解这里是自动获取信息,有些类似我们的下拉列表那种及联获取信息。
代码语言:javascript
复制
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,为关闭状态。

代码语言:javascript
复制
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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 好事发生
  • 引言
  • 前期准备
  • 如何构建GraphQL
  • 创建GraphQL集成环境
  • IDEA打开GraphQL项目
  • IDEA中安装支持插件
    • 1 Lombok插件
    • 2 支持Schema模型文件的插件
    • 3 Spring 支持的GraphQL插件
  • GraphQL代码示例
    • 1 拷贝官网提供的代码
    • 2 拷贝文件说明
    • 3 开启UI可视化调试页面
  • 启动GraphQL
  • 测试GraphQL
    • 1 UI可视化请求信息
    • 2 Postman请求信息
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档