delphi query 存储为dbf_GraphQL的探索之路 一种为你的API而生的查询语言 第314篇

73458a70221f29865bcb3f4a902cdbe0.png

相关历史文章(阅读本文之前,您可能需要先看下之前的系列?)

国内最全的Spring Boot系列之三

Docker优雅的关闭SpringBoot - 第310篇

「字节码插桩」统计方法耗时(第一篇:初出茅庐)- 第311篇

「字节码插桩」统计方法耗时(第二篇:崭露头角)- 第311篇

「字节码插桩」统计方法耗时(第三篇:叱咤风云)- 第313篇

2020上半年发文汇总「值得收藏」

师傅:徒儿,这几个星期,你找个技术点自我研究学习下。

悟纤:师傅,你这是抛弃徒儿了嘛?┭┮﹏┭┮

7c31ec6c1e42239e55e2abed991a9156.png

师傅:你又想哪里去了,这是训练下你自我学习能力,再说了师傅也不能一直陪在你身边呀,你总的学会自我成长呢。

4d68594d13adc0b1f530bcf6c852cd42.png

悟纤:看来师傅是用心良苦呐,徒儿错怪师傅了。师傅,徒儿这就去找个技术点研究下。 

b1b29146b43483d83d3a5d7614574c26.png

说明

         在接下来的文章主要介绍:

(1)GraphQL是什么?

(2)GraphQL在SpringBoot中如何集成?

一、GraphQL的官方介绍

         我们进入GraphQL的官方文档:https://graphql.cn ,可以看到一段话:

090ef574dcbbfa1778a71d7be112e57c.png

         是不是看着感觉不知所云呐?那听我慢慢道来。

二、GraphQL的探索之路

2.1 GraphQL的定义

         GraphQL 是一种 API查询语言, 用于服务器端执行按已定义类型系统的查询. GraphQL 不与任何特定的数据库或存储引擎进行绑定, 而是由您的代码和数据支持.(官方描述)。

         上面这句话不好理解,看看下面这个解释:

GraphQL 是一种针对 Graph(图状数据)进行查询特别有优势的 Query Language(查询语言),所以叫做 GraphQL。

         说白了就是想要什么, 就传入什么字段, 也就会返回什么字段,具体字段处理是服务器所提供, 而 graphql 并不会关心服务器怎么处理

举例说明:

传统的rest api:

/user/{id}  return { id, name, age } 是一成不变的,

graphql

findUser(id: xx)  return { id, name }  (注: 传输参数id, 指定返回字段 id, name, 当然也可以写{ name, age },完全取决于前端需求 )

         是不是还不懂,没有关系,先接着往下看。

2.2 GraphQL的小历史

         早在2012年,Facebook认为人们只有在离开PC的时候才会用智能手机,很快他们就发现这个认识是多么的错误!于是Facebook把注意力从Web移到了智能终端上。在那个时候,他们严重的依赖于RESTful API。大量的并发请求和对补充数据的二次请求给他们造成了很大的麻烦,尤其是响应时间。一个解决方案是设计足够多的资源来满足单次的请求。但是,这造成了服务端的扩展和维护困难。

在寻找更好的解决方案的过程中,Facebook的工程师发现开发人员不应该先入为主的把数据看成RESTful一样的集合。如何更好地存储和获取数据不应该是他们要主要考虑的内容。他们应该更多的考虑数据的关系,网状的关系。

在这个情况下GraphQL应运而生。

2.3 GraphQL工作机制

         一个GraphQL查询可以包含一个或者多个操作(operation),类似于一个RESTful API。操作(operation)可以使两种类型:查询(Query)或者修改(mutation)。我们看一个例子:

query {  findById(id: 1) {    id     name  }}

         你的第一印象:“这个不是JSON?”。还真不是!就如我们之前说的,GraphQL设计的中心是为客户端服务。GraphQL的设计者希望可以写一个和期待的返回数据schema差不多的查询。

注意上面的例子有三个不同的部分组成:

(1)findById是查询的operation(这是一个Query)

(2)(id: 1) 包含了传入给Query的参数(多个参数,使用逗号隔开,比如:(id:1,name:”张三”) )

(3)查询包含id和name字段,这些字段也是我们希望查询可以返回的。(这里就是GraphQL的特性,能够指定要返回的字段,如果只指定了id,那么返回结果就只返回id。)

到这里是不是有点理解了GraphQL了,以前如果要返回不同的数据的话,需要编写多个接口,或者编写一个接口干脆什么字段都给返回给你,前端你自己就看着办吧,要显示哪些你就显示哪些,不要显示的,你就不要管了,4G时代,还什么流量问题,不用考虑。

我们看看server会给这个查询返回什么:

{  "data": {    "findById": {      "id": "1",      "name": "悟纤"    }  }}

         就如我们期望的,server会返回一个JSON串。这个JSON的schema和查询的基本一致。

         从以上的例子里你可以看出来GraphQL允许客户端明确指定它要的是什么,避免了数据后去的冗余或者不足。和RESTful API对比一下,每一个客户端都会对应很多个RESTful API或者一个API要服务很多个客户端。所以说GraphQL是很好的查询语言。所有的operation、参数和所有可以查询的字段都需要在GraphQL server上定义、实现。

悟纤小结

悟纤:今天咱们就先探索到这里,知识需要慢慢消化,一口气不能吃个胖子。

(1)GraphQL(Grapha Query Language):主要是作用于数据接口,比如前端后端交互,给客户端筛选自由获取服务端事先定义好的数据,提高了交互接口的灵活性。

(2)GraphQL官方说:GraphQL一种为你的API而生的查询语言。

(3)API:应用编程接口,全称是Application Programming Interface。

(4)GraphQL简单理解:在请求API的时候,允许我们指定要返回的字段。

(5)GraphQL主要有两种操作(Operation):查询(Query)或者修改(mutation)。

         到此你是不是还是有点小蒙圈,没事,下节课我们会使用个小栗子来助你理解GraphQL。

         学习完本文之后,记住以下这句话就足以了:

GraphQL解决了接口查询字段差异性的要求。

07ba53437000133e38857a9b6db9c881.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值