欢迎阅读

本文会通过实际场景介绍一下 GraphQL,目的是让你快速了解 GraphQL 是什么,以及基本工作思路,不包含实际用法,所以阅读很轻松。

一、GraphQL 是什么?

GraphQL 是后端数据查询语言,可以简单理解为 GraphQL 对标的是 REST 接口。

GraphQL 由 Facebook 开源,目前已经在 Facebook 中支撑千亿级的 API 接口调用,在 Facebook 之外正在被迅速应用。

我们不要被 GraphQL 这个名字误导了,第一次看见它时,我还以为这是一个图数据库的查询语言呢。

GraphQL 大体上的确是 "图查询" 的意思,但这个 "图" 是数据图谱的意思,不是图数据库。

二、GraphQL 思路

以上图为例,这是主流的 Feed 流形式,如何实现呢?

定下来界面中需要显示哪些数据元素之后,后端开始为其定制一个 REST 接口,查询出相关数据:

  • Post 帖子
  • 作者
  • Like 喜欢
  • Comment 评论
  • Share 分享

后端程序员进行数据关联查询,取出其中需要的数据项,然后封装为一个易于前端操作的数据结构,例如 JSON 对象。

这样 Feed 流的接口就 OK 了,同样的,对于其他界面再进行相应的接口开发。

例如在帖子详情页面,涉及的数据还是 Feed 流中的这些,但具体的数据项不同了,例如:

  • 帖子需要全文
  • Like 需要点赞用户的图像列表、ID
  • Comment 评论需要详情列表

因为数据项的不同,就需要针对这个界面需求重新开发吧。

如果你嫌麻烦,提供了一个大而全的接口,后端开发是简单了,但新问题来了,例如:

  • 前端开发需要从结果数据中仔细挑出自己所需要的数据项。
  • 接口返回数据中包含大量的前端无用数据,会占用更多的带宽,影响性能,例如 Facebook 那种千亿级的 API 调用量,这种带宽的浪费是不能容忍的。

有什么更好的办法呢?(如果你有更好的经验,欢迎发给我,我会分享给大家

Facebook 为了解决这个问题,设计出了 GraphQL。

GraphQL 解决思路

对于上述场景,本质上是后端在应付前端的每个需求,是以前端需求为中心。

前端说我要这些数据,后端就去准备这些数据,来一个需求就处理一个需求。

Facebook 的想法是:

数据就是那样的,每个数据对象包含哪些项,根据各个数据对象的关系就可以形成数据的图谱了。

后端负责构造这个数据图谱,前端根据数据图谱来查询自己所需要的数据。

这样前端与后端都是以数据图谱为中心了,后端就不用伺候前端各种不同类型的需求了,前端也可以自由的精准查询数据了。

感觉比较抽象是吧,看下面的示例代码:

# ----------- 定义数据类型 -----------
type Post {
id: String!
title: String!
description: String
comments: [Comment]
likes:[Like]
} type Comment{
id:String
} type Like{
id:String
} # ----------- 定义查询接口 -----------
type Query {
recentPosts(count: Int, offset: Int): [Post]!
} type Mutation {
writePost(title: String!, category: String) : Post!
}

(上面代码可横向滑动)

其中分为2个部分:

  • 上面部分定义了数据类型,例如 Post,指明包含哪些数据项,其中的 commentslikes 关联了其他的数据类型,这样就描绘出了数据对象之间的关系。
  • 下面部分定义了查询接口,供前端调用。

然后我们看前端怎么用。

上图中,左边是前端的调用方式,右边是返回的数据结果。

前端调用了 recentPosts 接口,并指明了只需要返回 id,所以,返回结果中只有 id 数据项。

上图中,前端调用了 recentPosts 接口,这次指明了需要:

  • Post 的 id 项
  • likes 的 id 项
  • comments 的 id 项

在右边的返回结果中可以看到,应前端的需求返回了相应数据。

三、小结

在以数据图谱为中心之后,后端省心了,前端自由了。所以 GraphQL 的核心就是构建好这个数据图谱。

以上就是 GraphQL 基本内容了,如果对它有兴趣,可以留言告诉我,之后我会整理一个 GraphQL 的使用教程。

写在最后

欢迎大家关注我的公众号【风平浪静如码】,海量Java相关文章,学习资料都会在里面更新,整理的资料也会放在里面。

觉得写的还不错的就点个赞,加个关注呗!点关注,不迷路,持续更新!!!

三分钟快速解析GraphQL基本工作思路!的更多相关文章

  1. 三分钟快速上手TensorFlow 2.0 (下)——模型的部署 、大规模训练、加速

    前文:三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署 TensorFlow 模型导出 使用 SavedModel 完整导出模型 不仅包含参数的权值,还包含计算的流程(即计算 ...

  2. 三分钟快速上手TensorFlow 2.0 (中)——常用模块和模型的部署

    本文学习笔记参照来源:https://tf.wiki/zh/basic/basic.html 前文:三分钟快速上手TensorFlow 2.0 (上)——前置基础.模型建立与可视化 tf.train. ...

  3. 三分钟快速上手TensorFlow 2.0 (上)——前置基础、模型建立与可视化

    本文学习笔记参照来源:https://tf.wiki/zh/basic/basic.html 学习笔记类似提纲,具体细节参照上文链接 一些前置的基础 随机数 tf.random uniform(sha ...

  4. 三分钟快速搭建分布式高可用的Redis集群

    这里的Redis集群指的是Redis Cluster,它是Redis在3.0版本正式推出的专用集群方案,有效地解决了Redis分布式方面的需求.当单机内存.并发.流量等遇到瓶颈的时候,可以采用这种Re ...

  5. 三分钟快速上手TensorFlow 2.0 (后续)——扩展和附录

    TensorFlow Hub 模型复用 TF Hub 网站 打开主页 https://tfhub.dev/ ,在左侧有 Text.Image.Video 和 Publishers 等选项,可以选取关注 ...

  6. 三分钟入坑指北 🔜 Docsify + Serverless Framework 快速创建个人博客系统

    之前由于学摄影的关系,为了提高自己的审美,顺便锻炼下自己的英文能力,翻译了不少国外艺术类的 文章.最近一直想搭一个个人博客来存放这些内容,又懒得折腾建站,遂一直搁置. 直到偶然发现了 docsify ...

  7. JUnit三分钟教程 ---- 快速起步

    JUnit三分钟教程 ---- 快速起步 摘自http://lavasoft.blog.51cto.com/62575/65625/ JUnit是个好东西,做大点的项目离不开这东西,实际中用的时候也因 ...

  8. 30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  9. 三分钟部署Laxcus大数据管理系统

    Laxcus是Laxcus大数据实验室历时五年,全体系自主设计研发的国内首套大数据管理系统.能够支撑百万台级计算机节点,提供EB量级存储和计算能力,兼容SQL和关系数据库.最新的2.x版本已经实现对当 ...

随机推荐

  1. 【题解】小Z的袜子

    期末考试结束了,来写写blog吧 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命-- 具 ...

  2. Jmeter之连接数据库

    1.下载mysql驱动文件 2.移动到Jmeter目录下的lib中 3.在配置文件中使用 jdbc:mysql://127.0.0.1:3306/fns_test_bak?useUnicode=tru ...

  3. Linux就该这么学28期——Day02 2.1-2.3

    本文记录必须掌握的Linux命令,部分内容引用自https://www.linuxprobe.com/basic-learning-02.html 工作中可使用https://www.linuxcoo ...

  4. OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 下面 ...

  5. devops-jenkins分布式构建

    1. devops-jenkins分布式构建 1) 点击系统管理 进入节点管理 2) 点击新建节点 3) 进行节点配置在node节点服务器配置,进行java的安装 [root@nginx-backup ...

  6. git add 添加错文件如何撤销

    git add 添加 多余文件 这样的错误是由于, 有的时候 可能 git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件 git add 如果添加了错误的文件的话 以下是撤 ...

  7. 2016年 实验三 B2C模拟实验

    实验三 B2C模拟实验 [实验目的] 掌握网上购物的基本流程和B2C平台的运营 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网. (3).奥派电子商务应用软件 [知识准备] 本实 ...

  8. TiOps,支持容器,支持多云安全远程运维,疫情期间免费开放,助力远程办公

    TiOps,支持多云环境安全远程运维,疫情期间免费对外开放在疫情期间,为减少疾病传染可能性,许多公司的选择了在家远程办公.对于运维来说,既要远程运维,又要保证安全,还要在复杂的IT环境中保持高效,面临 ...

  9. IDEA项目路径初探

    IDEA项目路径 普通Java项目 普通Java项目,标准目录结构src下的路径就是classpath类路径,每次编译都会将src目录下新增的类和资源文件打包进类路径. 如下图,类文件和配置文件都会被 ...

  10. 基于SpringAop的鉴权功能

    什么是 AOP 首先我们先了解一下什么是AOP,AOP(Aspect Orient Programming),直译过来就是面向切面编程.AOP是一种编程思想,是面向对象编程(OOP)的一种补充.面向对 ...