
这里推荐一篇实用的文章:【探索数据结构】线性表之顺序表,作者:【池央】。
这篇文章作者主要讲初步认识了数据结构后,我们一起来探索它的逻辑结构里面的线性结构吧。线性结构是一对一的关系。线性表在逻辑结构上是连续的,在物理结构上不一定是连续的。线性表中的顺序表(本篇的主角)在物理结构上是连续的,而线性表中的链表在物理结构上却是不连续的。
上一篇熟悉了API架构风格GraphQL API和RESTful API,这一篇结合Spring集成GraphQL来实践下,深度剖析下。

开发工具:IDEA(或者VS code都是可以的)、Postman、浏览器。
运行环境:如果需要执行GraphQL,JDK的版本必须为 JDK 17+。
仓库管理:Gradle 7.5+ or Maven 3.5+ 。
大多数Spring入门指南一样,可以从头开始并完成每个步骤,或者您可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会获得工作代码。
Github克隆示例源代码。Spring Initializr 方式创建一份源代码。而我本人更建议学习GraphQL的可以从 Spring Initializr 方式自己创建并下载源代码,下面从 9个步骤 来创建一个GraphQL集成程序。
首先直接访问地址获取配置信息,https://start.spring.io/,请求地址后如下图所示,并按照自己的风格填写信息。

maven项目,在GraphQL中如果使用Github下载,默认为Gradle管理依赖库,我习惯maven,所以此处选择maven。Java。如果你熟悉Kotlin或Groovy,也可以选择他们。jar包项目,可直接运行访问。Spring for GraphQL 和 Spring Web依赖。将代码导入到项目中就是下面的结构。

可以提前在插件中搜索插件,也可以创建项目文件后根据需要下载安装插件。
这个插件可选,后续再做介绍。

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



当前为了方便演示,直接从官网下载代码。下载地址为:
https://github.com/spring-guides/gs-graphql-server/tree/main/complete

将 标注的 1处 和 2处 的文件直接拷贝到项目的对应目录中即可。拷贝后的代码结构如下:

我们从官网拷贝了4个文件,分别是 Author.java、Book.java、BookController.java、schema.graphqls 。
Book.java:书籍关系对象,定义书籍实体类以及书籍需要的方法。//@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控制器类功能一样,但有几处不一样。@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());
}
}@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
}到此,便完成了一个功能的代码编制。如果需要使用GraphQL自带的控制台(UI可视化视图)来测试代码功能,可以在项目的配置文件 application.properties 中增加开启视图即可,默认是false,为关闭状态。
spring.graphql.graphiql.enabled=true
按照启动Spring Boot项目的方式,直接运行 XXXApplication主文件即可启动项目,默认的端口为 8080,默认项目地址为 / ,端点请求地址为 HTTP POST /graphql。

由于我们在 配置文件开启了 UI 视图,可以直接访问地址
http://localhost:8080/graphiql?path=/graphql

在UI可视化控制台输入查询信息,点击按钮,可以在右侧看到返回的JSON信息。

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


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

本文主要是从官方案例中使用Spring集成GraphQL,从代码上、代码编写上、启动、测试等,浅谈下GraphQL的运用,不过个人感觉有点一反常态,写习惯了RESTful之后,再来学习GraphQL,的确有些不适应,但是未来在短视频、大流量的加持下,会好的,希望能给更多开发者以帮助。
[引用]
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。