目录

介绍

什么是GraphQL?

GraphQL的基础知识

GraphQL的好处

更好的数据检索

更好的版本控制

更好地控制响应数据

汇总数据

重要资源

结论


介绍

GraphQL这个词在网络上不断涌现。在许多技术活动中也提到过,最新的是AWS re:Invent 2017,他们发布了AppSync,一个完全托管的GraphQL服务。

为什么GraphQL突然在开发者社区中引起涟漪,它的崛起如何影响科技世界?

虽然该名称可能误导您相信它是一种查询语言,但它是REST(及其备用版本)的替代品。我已经为想要了解GraphQL的人编写了关键要点。

为了帮助您更好地理解和突出差异,我已经使用REST和HTTP包含了插图示例。

什么是GraphQL?

GraphQL由Facebook于2012年内部开发,并于2015年10月向公众发布。在Facebook术语中:GraphQL是一种查询语言,旨在通过提供直观,灵活的语法和系统来描述其数据需求和交互,从而构建客户端应用程序。它提供了一种语言,用于查询后端数据并更改数据。

简而言之,GraphQL是一种由Facebook创建的查询语言,它指定如何从API请求数据。

GraphQL的基础知识

GraphQL有3个高级操作:

  1. 查询——用于获取数据,如REST中的GET方法
  2. 突变——在获取后用于创建/修改数据,如REST中的POST,PUT,DELETE方法
  3. 订阅——用于接收来自服务器的数据更新的长连接,例如Web套接字

这些操作通过定义API功能的模式公开。模式由类型组成。开发人员定义的模式决定了GraphQL API的功能。

每个GraphQL API都有两种类型:

  1. 根类型,例如查询,突变,订阅
  2. 用户定义的类型,例如待办事项,人类,动物等。

每个GraphQL API都有一个query类型,可能有也可能没有突变和订阅类型。根类型确定GraphQL查询的入口点。

示例查询:

{
human(id: 101) {
name
age
}
}

以上查询执行以下操作:

  1. 从root对象开始
  2. 我们选择带有id 101字段的human
  3. 对于hero返回的对象,我们选择name和age字段

查询的结果将是:

{
"data": {
"human": {
"name": "John Doe",
"age": 20
}
}
}

要使上述查询起作用,我们必须向模式添加一个人类类型,该模式由它可以返回的字段组成。根查询和人类的类型如下:

type Human {
name: String!
age: Int!
}
type Query {
human(id: ID!): Human
}

类型的字段需要返回一些数据。这发生在GraphQL中。API是通过一个称为GraphQL解析器的概念实现的。这是一个调用数据源或调用触发器返回某个值(例如单个记录或记录列表)的函数。

解析器可以具有多种类型的数据源,例如NoSQL数据库,关系数据库或REST API。我们可以汇总来自多个数据源的数据并返回相同的类型,混合和匹配以满足您的需求。

将模式连接到解析程序函数后,客户端应用程序可以发出GraphQL查询,或者可选地发出突变或订阅。我相信你已经开始看到GraphQL与其前身和其他常用数据库的不同之处。

但是,它有实际的好处吗?让我们来看看。

GraphQL的好处

更好的数据检索

查询数据非常简单,减少了到服务器的往返次数。考虑一个包含内容,评论等的博客。每个评论都可以有描述和用户,每个用户都会有姓名,电子邮件,博客列表。

想象一下,我需要博客内容和评论,评论的用户和该用户的博客。为实现这一目标,我们必须进行以下REST调用。

GET - api/vi/blogs/101/ -> will return the blog with its contents
GET - api/v1/blogs/101/comments -> will return the comments of the blog
GET - api/v1/users/30/blogs -> will return the blogs of the user

假设我们有4个评论,因此N = 4,所以需要进行的调用数是步骤1 +步骤2 +步骤3 x 4,其计算结果为6个调用。我们需要在博客上发表评论的所有用户的博客,因此步骤3必须多次执行N次,具体取决于用户数量。

现在,使用以下查询使用GraphQL时,可以在1次调用中存档完全相同的内容:

{
blog(id: 101) {
content
comments {
content
users {
name
email
blog {
content
}
}
}
}
}

您是否注意到我们如何用一个简单的逻辑替换几行代码?

更好的版本控制

在REST API中,如果资源中存在新字段或某些更改,则必须创建新版本的端点。这会导致管理更多代码,另一个端点并在弃用后删除旧端点。

GraphQL通过允许用户在动态地向类型添加新字段时保持相同的端点而不破坏任何现有的内容来解决这个问题。

更好地控制响应数据

考虑我们有一个响应式Web应用程序使用的API。根据应用程序打开的设备,屏幕上显示的数据会有所不同,某些字段可能隐藏在较小的屏幕设备上,所有字段可能会显示在屏幕较大的设备上。

以下信息图解释了与使用REST时返回的管理数据相关的各种难点:

使用GraphQL,只需根据设备查询所需的字段即可。前端控制着它请求的数据,并且任何GraphQL API都可以使用相同的原则。

汇总数据

使用GraphQL,我们可以轻松地聚合来自不同来源的数据,并在一个保护伞下为用户提供服务,而不是从前端或后端进行多次REST调用。我们可以通过统一的API公开遗留系统。

如上所述,每个GraphQL API都由类型、模式和解析器组成。为了创建API,我们需要以某种语言创建GraphQL服务器。如您所知,GraphQL本身就是一种语言并且具有规范,规范必须以编程语言实现才能使用。

几乎所有现代编程语言现在都可以使用GraphQL规范的实现,因此可以非常顺利和轻松地实现集成和迁移。

重要资源

作为一名程序员,我相信你很想尝试使用GraphQL。我编写了一些有用的工具和库,您可以利用这些工具和库来使GraphQL更加有趣。

  • graphql——JS中GraphQL的一个实现
  • Apollo——GraphQL的工具包。它具有多个平台的服务器实现
  • Prisma——将数据库转换为GraphQL API的工具。它支持多个数据库
  • Scaphold——托管的GraphQL后端
  • AWS AppSync——托管的GraphQL服务器,完全托管AWS并连接到多个数据源

结论

GraphQL非常强大并且具有很大的潜力,但它仍然处于起步阶段。然而,在很短的时间内,它已经获得了很大的吸引力,并被社区广泛采用。

显而易见的流行显示了易用性和GraphQL的重要性。我在这里讨论的好处只是我在第一次使用它时遇到的一些好处。

随着系统的发展,我相信会有更多的东西没有被开发出来——有一个巨大的生态系统可以利用GraphQL。

有关GraphQL的完整视频,请访问https://youtu.be/vr2PiivOPZQ。

GraphQL:现代数据库管理系统的演变相关推荐

  1. 图文详解 DBMS 数据库管理系统三层架构体系(三级模式)《ClickHouse 实战:企业级大数据分析引擎》...

    引文 计算机科学领域的所有问题,都可以通过添加一层中间层来解决.通过在用户和计算机中间添加一层逻辑层(概念模型层),于是就有了"数据库的三级模式":数据库在三个级别 (层次)上进行 ...

  2. DBMS 数据库管理系统的三级模式架构《ClickHouse 实战:企业级大数据分析引擎》...

    引文 计算机科学领域的所有问题,都可以通过添加一层中间层来解决.通过在用户和计算机中间添加一层逻辑层(概念模型层),于是就有了"数据库的三级模式":数据库在三个级别 (层次)上进行 ...

  3. Mysql数据库管理系统

    数据库的概述 Mysql: DBMS(数据库管理系统 DataBase Manager System) 概述:数据库(Database)是按照数据结构组织.存储和管理数据的仓库,它产生于距今六十多年前 ...

  4. 数据齿轮(DataGear)数据库管理系统 v1.1.1 发布

    数据齿轮(DataGear)数据库管理系统v1.1.1版本发布,此版本是v1.1版本的紧急BUG修复版本,更新内容如下: 修复:修复集成软件包在JRE8及以上版本无法正常运行的BUG: 数据齿轮(Da ...

  5. 顶级数据库管理系统的性能比较研究(论文翻译)

    本文译自 <A Comparative Study on the Performance of the Top DBMS Systems >Youssef Bassil LACSC – L ...

  6. Mac MySQL 数据库配置(关系型数据库管理系统)

    本文已停止更新,点击此链接查看本文最新内容 !!! 前言 MySQL 关系型数据库管理系统. 1.配置准备工作 1)配置数据库准备工作 下载相关软件 mysql-5.7.21-1-macos10.13 ...

  7. mysql数据库管理系统的配置文件是_MySQL学习笔记_1_MySQL数据库管理系统概述

    1. MySQL架构 C/S: client / server架构 MySQL DBMS(Data Bank Management System): 数据库管理系统 客户端  服务器 --->  ...

  8. mysql 不同的文件系统_文件系统,数据库管理系统,操作系统之间有什么联系?...

    这仨名字里都有个"系统",但完全不是一个东西,也谈不到谁包含谁的问题. 简单的说他们之间的关系:文件系统和操作系统可以看作一种"合作"关系,而数据库管理系统则是 ...

  9. 【DBMS 数据库管理系统】数据仓库特征 ( 特征一 : 面向主题组织数据 | 特征二 : 数据集成 | 特征三 : 数据不可更新 | 特征四 : 随时间不断变化 )

    文章目录 一.特征一 : 面向主题 数据组织方式 二.特征二 : 数据集成 三.特征三 : 数据不可更新 四.特征四 : 数据仓库中的数据 随时间不断变化 一.特征一 : 面向主题 数据组织方式 主题 ...

最新文章

  1. pandas使用fillna函数并设置bfill参数使用列中的后序值填充缺失值
  2. 网络推广外包——企业委托网络推广外包公司提高网站流量和访问量
  3. C/C++ static和const关键字的作用
  4. IDEA基于kotlin开发android程序配置小结
  5. java使用zxing生成二维码
  6. wince7 屏幕控制_技术干货:WinCE 7.0下的触摸屏驱动
  7. 用计算机软件绘制思维导图和手绘思维导图,手绘思维导图与计算机思维导图的对比...
  8. MVC模式在游戏开发的应用
  9. python help 函数_python怎么用help函数
  10. JUC中的Atomic原子类
  11. 【超详细】随机变量及其分布——《概率论与数理统计》第二章学习笔记
  12. 导入从postman导出的json接口文件,并设置全局变量
  13. 服务器如何装linux 系统教程,教程/操作系统 手把手教你装Linux系统
  14. 河南联通申请公网ip
  15. vue下拉框数据填充
  16. iOS开发(OC)——音频播放AVPlayer
  17. android 4.4 获取图片主色调,Android Lollipop:使用Palette抽取图片主色调
  18. java里面com.是什么意思
  19. Animator is not playing an AnimatorController
  20. MySQL_12_ShardingJDBC实现读写分离与分布式事务

热门文章

  1. matlab有限差分一维导热,一维导热方程 有限差分法 matlab实现
  2. java annotations详解_Java Annotations详解
  3. mysql 5.6.13-winx64_MySQL-5.6.13 zip解压版的安装与配置教程
  4. 时尚达人必备的潮流壁纸桌面!
  5. 限时抢购促销海报设计没想法,看这里!眼见的倒计时紧迫感
  6. mate30支持鸿蒙系统,Mate30不能使用GMS服务,华为P30不能通过谷歌安全认证,华为:鸿蒙系统不远了...
  7. linux mysql 主从数据库_【Linux】【MySQL】MySQL主从数据库
  8. libcareplus多补丁管理
  9. java图片上传并解析,详解SpringMVC实现图片上传以及该注意的小细节
  10. 安卓工控主板运行时会自动重启_工控机日常维护的方法与步骤