1.Graphql介绍 重试    错误原因

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

优势

  1. GraphQL 速度快,并且比较稳定,GraphQL 的操作是在数据层面的,所以比较快。

  2. GraphQL 可以获取更多的资源,当查询一个数据的时候,不止是这个数据,甚至可以很快地查询到数据引用的另一个数据。GraphQL 可以在单个请求中去获取尽量多的数据,并且在弱网状态下,GraphQL 依旧表现出色。

  3. GraphQL 是单端点查询,并在此端点中去完成所有的查询。

  4. GraphQL 的可持续性非常出色,无论是新字段、还是旧字段,它都能很好地去处理,可维护性也极佳。

  5. GraphQL 具有向下兼容的特性,就算是很久很久以前的功能,GraphQL 还是能很好地去兼容它,保证旧版本的正常运行,同时又不影响新功能的加入以及整体的稳定性。这样做的好处就是,不需要去担忧版本号问题了。

  6. GraphQL 具有强类型,在 GraphQL 的查询中,一个级别对应一个强类型,这个类型充当一个字段的描述。这样的好处就是,在查询之前,可以校验出错误并提示,方便定位问题,提高性能。

  7. 自省:可以查询 GraphQL 服务器支持的类型。这为工具和客户端软件创建了一个强大的平台,可以在这些信息的基础上构建静态类型语言的代码生成、我们的应用程序框架、Relay 或 GraphiQL 等 IDE。

  8. GraphQL 支持使用者去决定服务器支持的类型。这样的好处就是,给很多使用 GraphQL 的 工具或者端建立了一个比较成熟且强大的应用平台,通过这个平台,一些框架、工具得到不断地优化提升。

劣势

  1. GraphQL 无法完成深度查询,所以无法对于未知深度的数据进行一次性查询。

  2. GraphQL 具有非常死板的响应结构,你必须遵从这个结构去查询数据,或者自己添加一个转换器来转换。

  3. GraphQL 无法进行网络级别的缓存,你必须使用另外别的办法进行持久查询。

  4. GraphQL 默认没有上传文件的功能,GraphQL 也不接收文件类型的参数,但是你可以使用 REST 的方式进行上传文件,达到上传文件的目的。

  5. GraphQL 的执行是不可预测的,因为 GraphQL 太过于灵活了。

  6. 同样的一个简单的 API,GraphQL 会表现得很复杂,所以建议简单 API 使用 RSET。

2.mysql环境搭建

参考代码仓库里面的mysql模块,这里只贴出docker-compose.yml

<span>version: <span>'3'</span></span>

运行

<span><span>docker-compose</span> <span>-f</span> <span>docker-compose</span><span>.yml</span> <span>-p</span> <span>mysql5</span><span>.7</span> <span>up</span> <span>-d</span></span>

初始化脚本

<span><span>CREATE</span> <span>DATABASE</span> <span>IF</span> <span>NOT</span> <span>EXISTS</span> <span>`BOOK_API_DATA`</span>;</span>

3.代码工程

 实验目标

实现一个基于graphql查询的例子

实现过程

1. 定义Schema,Schema使用GraphQL Schema Definition Language (SDL)来定义 重试    错误原因

2. 实现Resolver,Resolver函数负责从数据源中获取请求的数据

3. 配置和启动GraphQL服务器 ,要启动GraphQL服务器,你需要安装相应的依赖和配置服务器

pomxml 重试    错误原因

<span><span>&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span></span>

GraphQLQueryResolver 重试    错误原因

<span><span>package</span> com.et.graphql.queryresolvers;</span>
<span><span>package</span> com.et.graphql.queryresolvers;</span>
<span><span>package</span> com.et.graphql.queryresolvers;</span>

graphqls(/resources/graphql) 重试    错误原因

<span><span>type</span> <span>Book {</span></span>

model 重试    错误原因

<span><span>package</span> com.et.graphql.model;</span>
<span><span>package</span> com.et.graphql.model;</span>

repository 重试    错误原因

<span><span>package</span> com.et.graphql.repository;</span>
<span><span>package</span> com.et.graphql.repository;</span>

DemoApplication.java 重试    错误原因

<span><span>package</span> com.et.graphql;</span>

application.yaml 重试    错误原因

<span>spring.jpa.hibernate.ddl-auto=none</span>

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

4.测试

启动spring boot应用 打开postman,调用

http://127.0.0.1:8088/graphql 输入 重试    错误原因

<span>query {</span>

返回结果 图片

5.引用