原文地址:https://xeblog.cn/articles/6 简介 千言万语汇成一句话:我的未来式由我做主。 GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据 ..

GraphQL 从入门到放弃

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

简介

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

GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。(完美的一段 Copy)

为什么要用它?

运用

基于 SpringBoot 的运用

依赖

<dependency>
	<groupId>com.graphql-java</groupId>
	<artifactId>graphql-spring-boot-starter</artifactId>
	<version>4.0.0</version>
</dependency>
<dependency>
	<groupId>com.graphql-java</groupId>
	<artifactId>graphql-java-tools</artifactId>
	<version>4.3.0</version>
</dependency>
<!-- 可视化调试工具 -->
<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphiql-spring-boot-starter</artifactId>
    <version>4.0.0</version>
</dependency>

定义

服务入口定义

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 类实现

image

Mutation 相关 Java 类实现

image

接口调试

graphql 默认请求路径: /graphql

可视化调试界面:/graphiql

使用 GraphiQL 调试

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

界面是长这个样子的
image

Query

查询单条数据

image

查询所有数据

image

组合查询

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

定义别名 类似这样的格式

别名: 接口

image

Mutation

添加

image

修改

image

删除

image

Console

image

使用 Postman 调试

Query

查询单条数据

image

查询所有数据

image

组合查询

image

Mutation

添加

image

修改

image

删除

image

参考

  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    2 引用 • 2 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    47 引用 • 293 回帖
1 操作
anlingyi 在 2019-05-19 12:45:41 更新了该帖
2 回帖   
请输入回帖内容...
  • 88250

    感谢分享!GitHub APIv4 就是这个格式的,能大大减少 API 调用次数,等有空仔细学习一下。

  • baymin  

    感谢分享