我尝试使用Spring GraphQL

摘要

这是我尝试在Spring Boot上使用GraphQL的查询的记录。试验了一下Spring GraphQL。

请参考官方文档以了解GraphQL的说明。

开发环境

操作系统:Windows 7 家庭版 64 位
Java 版本:Java 11
STS 版本:4.10.0

手頭的流程摘要

    • Spring Bootプロジェクトを作る

 

    • GraphQL周りを設定する

 

    サーブレットをGraphQL経由で実行する

创建一个Spring Boot项目

在Spring Boot 2.1.9版本下创建项目,依赖关系如下。请根据个人环境调整数据库相关设置。

    • Lombok

 

    • Spring Data JPA

 

    • Oracle Driver

 

    Oracle Database XE

GraphQL相关

请注意事项

    • Spring Bootのバージョン

 

    GraphQL単体で使うことについて

Spring Boot的版本

在Spring GraphQL中,需要在pom.xml中指定Kotlin的版本。但是,在此篇文章发表时,Spring Boot可选择的版本为2.5.5、2.4.11等,这些版本中已经在Spring Boot的依赖关系中指定了Kotlin的版本,因此在pom.xml中再次指定会导致Maven出现错误。作为解决方案,我们先创建一个可选的Spring Boot应用程序,然后将其降级到较旧的版本,以避免出现Kotlin的错误,然后再进行尝试。

关于单独使用GraphQL。

我想在STS中使用GraphQL,但是由于GET方法需要对URL参数进行编码,因此我决定使用GraphiQL。

然而,在项目创建时,由于它不是依赖关系的一部分,所以我们直接编辑了pom.xml文件进行添加。

根据STS的版本,可能可以添加创建时的依赖关系。

<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphql-spring-boot-starter</artifactId>
    <version>11.1.0</version>
</dependency>
<dependency>
    <groupId>com.graphql-java-kickstart</groupId>
    <artifactId>graphiql-spring-boot-starter</artifactId>
    <version>11.1.0</version>
</dependency>

尝试查询

我将解释获取注册在以下类中的信息列表所需的步骤。

// 前略
@Data
public class UserInfo {
    private String id; // ID
    private String name; // 氏名
    private Integer age; // 年齢
}

在本次说明中,将会解释使用GraphQL时在现有的Spring Boot应用程序中所需要的步骤。

    • GraphQLQueryResolverの実装クラス作成

 

    • application.yamlへの追記

 

    • schema.graphqlsの作成

 

    GraphiQLで動作確認

对application.yaml的追加内容

在应用程序内运行GraphiQL,并指定GraphQL端点和GraphiQL端点以进行操作确认。以下是最低限度的指定。

graphiql:
  enabled: true
  mapping: /graphiql
  endpoint:
    graphql: /graphql

创建一个实现GraphQLQueryResolver的类。

当使用GraphQL操作数据库数据时,需要实现该接口。UserInfoDao是一个使用Spring Data JPA创建的现有组件的DAO,因此省略了解释。

// 前略
@Component
public class UserInfoQueryResolver implements GraphQLQueryResolver {

    @Autowired
    UserInfoDao userInfoDao;

    public List<UserInfo> getUserInfoList() {
        return userInfoDao.getUserInfoList();
    }
}

创建schema.graphqls。

通过将schema.graphqls文件放置在src/main/resources/graphql目录下,可以在应用程序中指定调用数据的结构、方法和数据。以下是最低限度的指定。

type UserInfo {
    id: ID!
    name: String!
    age: Int
}

type Query {
    getUserInfoList: [UserInfo]
}

在GraphiQL中進行操作驗證

image.png
image.png

In Chinese, one possible paraphrase for “最後に” is “最终”.

使用GraphQL,客户端的API调用变得统一化,
可以顺利适应多样化的客户端需求。

闲谈

通过在Spring中使用GraphQL,我们现在可以处理其他语言中的GraphQL。这是一个很好的机会,让我们改变对于服务器端不一定要使用Java的看法。

另外,完全和这个无关,但在这里,Spring GraphQL被描述为“为发布做准备”。我意识到了英语的重要性。

广告
将在 10 秒后关闭
bannerAds