GraphQL全面深度讲解

目录

一、GraphQL 是什么

二、GraphQL 规范

数据模型

字段

参数

三、运行示例

四、优势和劣势

优势

劣势


一、GraphQL 是什么

GraphQL 是一种用于 API 的查询语言,也是一个基于服务端的运行引擎。 GraphQL 提供了一套完整的规范和描述用于查询 API,服务端能够准确地返回给客户端需要的数据且没有任何冗余的数据。GraphQL 本质是 API 查询语言,用于前后端数据的查询;开发者可以自定义数据模型、查询规范和查询参数,并在一个请求中就可以获取所有想要的数据。这不像 RESTful 请求,可能需要请求多次才可以获取需要的数据。所以在 GraphQL 请求中,开发者对于返回的结果是有确定性的。

二、GraphQL 规范

数据模型

数据模型用于定义对象实体的数据结构以及对象之间的关系,比如对象有哪些属性,下图表示一个完整的数据模型,定义了一个查询 Query 和两个返回对象 Header 和 Query,这两个对象分别包含的属性字段和数据类型也分别定义了,这些就会用于实际的 GraphQL 的请求中。

字段

在 GraphQL 的查询中,服务端返回给客户端的请求结果包含了预期的结构,就是准确地返回每个请求的字段结果数据。服务端响应的字段和请求的字段是一致的,这个就是 GraphQL 最显著的一个特性,开发者是有预期的。如下图所示,按照上面定义的例子,请求了两个字段,返回了两个字段的结果。使用的参考工具是:APOLLO

参数

在查询数据的时候,可以传递参数进行查询,比如下图中 person 以 id 参数来查询相关的属性数据,在下方的变量中可以输入实际的 id 进行查询。

三、运行示例

示例一:根据数据模型输出完整的数据结果

四、优势和劣势

了解的 GraphQL 基本的一些概念和用法,简单分析一下使用 GraphQL 作为 API 查询语言的优劣势。

优势

  • GraphQL 只用一个数据源就可以查询所有数据,所有的请求都可以访问一个服务端点。
  • GraphQL 返回的结果响应准确地根据客户端的请求字段,减少客户端和服务端之间的干扰。
  • GraphQL 支持所有数据类型的定义和传输,包括请求中的参数传输。
  • GraphQL 现在拥有很多开源的工具平台以及插件和扩展。

劣势

  • 一些熟悉 RESTful 请求的开发者,可能需要花一段时间学习 GraphQL。
  • 对比 RESTful 接口开发,服务端开发者可能会需要花更多时间开发比较容易维护的数据模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/147032.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一种基于体素的射线检测

效果 基于体素的射线检测 一个漏检的射线检测 从起点一直递增指定步长即可得到一个稀疏的检测 bool Raycast(Vector3 from, Vector3 forword, float maxDistance){int loop 6666;Vector3 pos from;Debug.DrawLine(from, from forword * maxDistance, Color.red);while (loo…

【LeetCode热题100】--98.验证二叉搜索树

98.验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 由于二…

【LeetCode热题100】--108.将有序数组转换为二叉搜索树

108.将有序数组转换为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 二叉搜索树的中序遍历是升序…

华为云云耀云服务器L实例评测|Elasticsearch的springboot整合 Kibana进行全查询和模糊查询

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 在前几期的博客中,介绍了Elasticsearch的Docker版本的安装,Elasticsearch的可视化Kibana工具…

计算机组成与结构

目录 一、计算机硬件组成 二、中央处理单元 1、功能 2、CPU的组成 三、校验码 四、体系结构的分类 1、按处理机数量分类 2、Flynn分类 五、指令系统 1、指令 2、寻址方式 3、指令系统 #CISC(复杂指令集计算机) RISC(精简指令集…

深眸科技入局AI视觉行业,以深度学习赋能视觉应用推进智造升级

随着科技的飞速发展,人工智能技术已经成为改变我们生活的重要力量,而深度学习作为人工智能的一个重要分支,近年来随着卷积神经网络的突破和推广,取得了显著进展,并呈现爆发式增长势头。 目前AI技术已经被迅速引入到机…

设计模式10、外观模式Facade

解释说明:外观模式(Facade Pattern)又称为门面模式,属于结构型模式 Faade 为子系统中的一组接口提供了一个统一的高层接口,该接口使得子系统更加容易使用 外观(Facade)角色:为多个子系统对外提供…

【爬虫】用wget命令爬虫的简易教程

文章目录 1. 获取登录的请求2. 用postman模拟登录请求3. 用wget模拟登录请求并保存cookie4. 开始爬取网站5. 查看爬取结果6. 网站爬虫简易教程 爬取需要登录的网站的资源 背景:对于一些网站需要使用用户名和密码登录并且使用了https,我们如果不通过凭证将…

BiMPM实战文本匹配【上】

引言 今天来实现BiMPM模型进行文本匹配,数据集采用的是中文文本匹配数据集。内容较长,分为上下两部分。 数据准备 数据准备这里和之前的模型有些区别,主要是因为它同时有字符词表和单词词表。 from collections import defaultdict from …

Excel·VBA分列、字符串拆分

看到一篇博客《VBA,用VBA进行分列(拆分列)的2种方法》,使用VBA对字符串进行拆分 目录 Excel分列功能将字符串拆分为二维数组,Split函数举例 将字符串拆分为一维数组,正则表达式举例 Excel分列功能 Sub 测…

centos7卸载docker

菜鸟教程-常见命令:https://www.runoob.com/docker/docker-command-manual.html 1. 准备工作: 1.1 杀死docker有关的容器: docker kill $(docker ps -a -q)1.2 删除所有docker容器: docker rm $(docker ps -a -q)1.3 删除所有d…

MT8385 Android AB分区系统升级(命令模式)

AB系统分区升级使用的是update_engine,RecoverySystem 只适用于单分区的系统升级 1.解压开update.zip 可以查看到palyload的属性 2.使用ADB命令update_engine_client即可对AB分区进行升级 使用adb shell 命令进行升级 update_engine_client --payload xxx --update --hea…

机器视觉工程师如何快速停止内耗,与自己和解

十分情绪化的人,是无法更好的成就自我的。 真正让人疲惫的是,不是工作,不是学习,更不是生活。而是你自己的情绪。 我们每一天去上班,感觉自己像个失败者。看不见自身的光芒,被自己的情绪笼罩,饱…

【python海洋专题九】Cartopy画地形等深线图

【python海洋专题九】Cartopy画地形等深线图 水深图基础差不多了,可以换成温度、盐度等 本期加上等深线 本期内容 1:地形等深线 cf ax.contour(lon, lat, ele[:, :], levelsnp.linspace(-9000,-100,10),colorsgray, linestyles-,linewidths0.25, t…

WorldPop2000年至2020年的全中国的人口统计数据

简介 WorldPop于2013年10月启动,将AfriPop,AsiaPop和AmeriPop人口绘图项目结合在一起。它旨在为中美洲和南美洲,非洲和亚洲提供一个开放的空间人口统计数据集存档,以支持发展,灾害应对和卫生应用。 平台中的WorldPop数…

JAVA 注解

1 概念 Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation 对象,然后通过该 An…

亘古难题:前端开发 or 后端开发

目录 一、引言二、两者的对比分析1. 技能要求和专业知识前端开发后端开发 2. 职责和工作内容前端开发后端开发 3. 项目类型和应用领域前端开发后端开发 4. 就业前景和市场需求前端开发后端开发 三、技能转换和跨领域工作四、介绍全栈开发五、结语附、开源项目微服务商城项目前后…

react create-react-app v5配置 px2rem (暴露 eject方式)

环境信息: create-react-app v5 “react”: “^18.2.0” “postcss-plugin-px2rem”: “^0.8.1” 配置步骤: 我这个方式是 npm run eject 暴露 webpack配置的方法 1.安装 postcss-plugin-px2rem 和 lib-flexible cnpm install postcss-plugin-px2rem…

了解汽车ecu组成

常用ecu框架组成: BCM(body control module)-车身控制模块: 如英飞凌tc265芯片: 车身控制单元(BCM)适合应用于12V和24V两种电压工作环境,可用于轿车、大客车和商用车的车身控制。输入模块通过采集电路采集各路开关量和…

C++标准模板(STL)- 类型支持 (std::size_t,std::ptrdiff_t,std::nullptr_t)

对象、引用、函数&#xff08;包括函数模板特化&#xff09;和表达式具有称为类型的性质&#xff0c;它限制了对这些实体所容许的操作&#xff0c;并给原本寻常的位序列提供了语义含义。 附加性基本类型及宏 sizeof 运算符返回的无符号整数类型 std::size_t 定义于头文件 <…