简介
千言万语汇成一句话:我的未来式由我做主。
GraphQL是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。(完美的一段Copy)
为什么要用它?
前端自己定义返回的数据及结构,降低前后端沟通成本
无需编写接口文档(GraphQL会根据schema自动生成API文档)
schema拼接,可以组合和连接多个GraphQL API,合并为一个,减少请求次数
运用
基于SpringBoot的运用
依赖
com.graphql-java
graphql-spring-boot-starter
4.0.0
com.graphql-java
graphql-java-tools
4.3.0
com.graphql-java
graphiql-spring-boot-starter
4.0.0
定义
服务入口定义
resources目录下创建一个名为root.graphqls的文件
# 查询相关接口
type Query {
# 通过id获取用户信息
getUserById(id: Int!): User
# 用户信息列表
listUser: [User]
}
# 变更相关接口
type Mutation {
# 添加用户信息
saveUser(user: addUserInput!): Boolean
# 删除用户信息
deleteUser(id: Int!): Boolean
# 更新用户信息
updateUser(user: updateUserInput!): Boolean
}
Query定义的是查询相关的入口
Mutation定义的是增删改相关的入口
剖析
geUserById: 与java类中的方法名一致
id: 方法参数,Int(I大写) 表示是一个int类型,"!"表示非空
User: 返回值类型,这里返回的是一个java对象
[type]: 表示是一个列表
scheme定义
resources目录下创建一个{beanName}.graphqls的文件
这个文件是 query/mutation 具体的 scheme 定义字段、类型
示例:user.graphqls
# 用户信息对象
type User {
# 编号
id: Int!
# 用户名
username: String!
# 密码
password: String!
# 年龄
age: Int
}
# 添加用户信息输入参数
input addUserInput {
id: Int!
username: String!
password: String!
age: Int
}
# 更新用户信息输入参数
input updateUserInput {
id: Int!
username: String!
password: String!
age: Int
}
实现入口
实体类
image
Query相关Java类实现
实现 GraphQLQueryResolver 接口
添加 @Component 注解
方法名、参数类型、返回值与root.graphqls内的定义一致
image
Mutation相关Java类实现
实现 GraphQLMutationResolver 接口
添加 @Component 注解
方法名、参数类型、返回值与root.graphqls内的定义一致
image
接口调试
graphql默认请求路径: /graphql
可视化调试界面:/graphiql
使用GraphiQL调试
界面是长这个样子的
image
Query
查询单条数据
image
查询所有数据
image
组合查询
相同名称的接口组合为一个接口调用,需要取一个别名用于区分它们
定义别名 类似这样的格式
别名: 接口
image
Mutation
添加
image
修改
image
删除
image
Console
image
使用Postman调试
Query
查询单条数据
image
查询所有数据
image
组合查询
image
Mutation
添加
image
修改
image
删除
image
参考