-
入门介绍
GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。
-
查询和其结果拥有几乎一样的结构。这是 GraphQL 最重要的特性,因为这样一来,你就总是能得到你想要的数据,而服务器也准确地知道客户端请求的字段。
-
GraphQL 查询能够遍历相关对象及其字段,使得客户端可以一次请求查询大量相关数据,而不像传统 REST 架构中那样需要多次往返查询。
-
在类似 REST 的系统中,你只能传递一组简单参数 —— 请求中的 query 参数和 URL 段。但是在 GraphQL 中,每一个字段和嵌套对象都能有自己的一组参数,从而使得 GraphQL 可以完美替代多次 API 获取请求。甚至你也可以给 标量(scalar)字段传递参数,用于实现服务端的一次转换,而不用每个客户端分别转换。
-
没看明白,
-
graphQL比rest好在哪?
rest一次只能请求一个资源,会造成太多的http请求 http 三次握手
-
graphQL查询还是走的http协议
-
http协议属于tcp/ip协议中的一种,是需要经过三次握手的操作的
-
post请求去查
-
参数为
{query: "{↵ test↵}↵", variables: null} query: "{↵ test↵}↵" variables: null
-
增加数据
mutation{ createPapers( id: "paper_id_5", paperName: "paper_name_5", updateTime: "2020-08-20" ){ id paperName updateTime } createBooks( id: "5" name: "name5" ){ id name } }
-
查询数据
query{ papers{ id paperName updateTime } books{ id name } book{ id name } test }
-
修改数据
-
graphQL可以与哪些存储结合?
- neo4j
- mysql
- elasticsearch
-
整理一下graphQL的特性
1、graphQL是声明式的数据查询,即调用方需要什么字段的数据,就把什么字段名传给被调用方,服务器会按数据查询的格式返回同样结构的 JSON 数据、真正照顾了客户端的灵活性,这是graphQL最重要的特性: 所查即所得。举例如下: 查询体: query{ papers{ id paperName updateTime } books{ id name } book{ id name } test } 返回值: { "data": { "papers": [ { "id": "paper_id_1", "paperName": "paper_name_1", "updateTime": "2020-08-19" }, { "id": "paper_id_2", "paperName": "paper_name_2", "updateTime": "2020-08-19" }, { "id": "paper_id_3", "paperName": "paper_name_3", "updateTime": "2020-08-19" }, { "id": "paper_id_4", "paperName": "paper_name_4", "updateTime": "2020-08-19" } ], "books": [ { "id": "1", "name": "name1" }, { "id": "2", "name": "name2" }, { "id": "3", "name": "name3" }, { "id": "4", "name": "name4" } ], "book": { "id": "1", "name": "name1" }, "test": "test" } } 2、GraphQL 的数据操作也分为 Query, Mutation, Subscription 三种类型。简单来讲, Query 就是获取数据的基本查询;Mutation 支持对数据的增、删、改等操作;而 Subscription 则用于监听数据变动、并靠 Websocket 等协议推送变动的消息给订阅方。这些操作中每一种都只是根据 GraphQL 标准构造的一段字符串而已。 3、graphQL本身只是一个查询语言,当graphql查询请求传送到后端时,后端接收到的只是一个graphql的schema,通过后台代码对schema的解析实现数据的查询。
-
整理一下graphql的优点
1、声明式地数据获取 如之前看到的那样,GraphQL 在使用查询语句式,使用声明式的方式获取数据。客户端在一个查询请求中,选择需要的数据和相关的字段实体。客户端根据其 UI 来决定需要的字段。你可以说这是 UI 驱动地数据获取。比方说,Airbnb 使用 GraphQL的例子,在 Airbnb 中的一个搜索界面,经常需要搜索房屋的住房体验和其他相关的一些信息,为了能在一个请求中检索所有的数据,一个 GraphQL 查询会根据 UI 选择数据中的一部分达到完美的匹配。毕竟,GraphQL 提供了极佳的关注点分离方式:客户端知道它需要什么数据,服务端知道数据的结构,以及如何从一些数据源(比如数据库、微服务、第三方 API)中拉取数据。 2、在 GraphQL 中没有过度获取 使用 GraphQL 不会存在过度获取的现象。使用与 Web 客户端公用的一个 RESTful API,一个移动客户端很可能会获取过多的数据,但是使用同样的 GraphQL API,移动客户端可以选择和 Web 客户端不同的数据字段。因此移动客户端能减少获取的信息,因为相对于 Web 应用的更大的屏幕,小屏幕上可能显示不了那么多信息。GraphQL 通过最开始按客户端需求选择数据,减少了传输数据的大小。 3、优化查询效率 当要查询多个数据源的不同字段数据时,往往restful接口要请求多次,而通过graphql查询只需要请求一次。 4、GraphQL 不需要进行接口的版本维护 在 GraphQL 中没有 API 版本的说法。在 REST 中,通常会提供一个 API 的多个版本(比如 http://api.domain.com/v1/、http://api.domain.com/v2/),因为随着时间过去,可能资源的结构也会发生变化。在 GraphQL 中,API 废弃可以做到字段级别,因此当一个客户端减少到一个废弃的字段,会得到一个废弃相关的警告。当没有客户端再使用这个废弃知道后,就可以从 schema 汇总移除这个字段了。这让一个 GraphQL API 不需要使用版本化的方式来演进。
-
整理一下graphql的缺点
1、当我们需要请求一个数据源的数据时,restful接口只需要请求一次,graphql接口也是需要请求一次,并且graphql和restful接口都是走的http协议,而http协议就免不了网络上三次握手的过程,在这种场景下,graphql并没有查询上的优势。 2、graphql支持查询的字段,在后台都需要代码去解析,这样往往会造成这种现象:使用graphql的后台代码量会比使用restful的后台代码量多出很多。 3、使用graphql提供接口时,会将后台支持的数据源和字段都公开出来,这样有可能会导致数据泄露等安全问题。
graphQL相关
最新推荐文章于 2024-05-26 09:41:02 发布