GraphQL从入门到放弃

原文地址:https://xeblog.cn/articles/6

简介

千言万语汇成一句话:我的未来式由我做主。

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
}
复制代码

实现入口

实体类

Query相关Java类实现

  • 实现 GraphQLQueryResolver 接口
  • 添加 @Component 注解
  • 方法名、参数类型、返回值与root.graphqls内的定义一致

Mutation相关Java类实现

  • 实现 GraphQLMutationResolver 接口
  • 添加 @Component 注解
  • 方法名、参数类型、返回值与root.graphqls内的定义一致

接口调试

graphql默认请求路径: /graphql

可视化调试界面:/graphiql

使用GraphiQL调试

访问地址:http://localhost:8080/graphiql

界面是长这个样子的

Query

查询单条数据

查询所有数据

组合查询

相同名称的接口组合为一个接口调用,需要取一个别名用于区分它们

定义别名 类似这样的格式

别名: 接口
复制代码

Mutation

添加

修改

删除

Console

使用Postman调试

Query

查询单条数据

查询所有数据

组合查询

Mutation

添加

修改

删除

参考

graphql.cn/learn/

你可能感兴趣的:(GraphQL从入门到放弃)