设为首页 - 加入收藏
广告 1000x90
您的当前位置:78345黄大仙救世网24码 > 接口主体 > 正文

GraphQL核心概念

来源:未知 编辑:admin 时间:2019-06-18

  GraphQL是一个用于API的查询语言。GraphQL并没有和特定数据库或者存储引擎绑定,而是依靠现有的代码和数据支撑。和RESTful不同的是,GraphQL会在一个请求中获取所有想要的数据,比如我们想要从服务器获取信息,则对于GraphQL请求,我们只需按照下方语法来发送请求即可获得想要的信息。

  基于GraphQL的服务构建主要有四个部分:数据定义(schema)、查询(query)、更改(Mutation)、数据解析(Resolver)

  首先,我们需要定义Schema(模型),在此文件中,我们需要定要定义各种数据类型。Schema 明确了服务端有哪些字段(用户自定义类型)可以用,每个字段的类型和子字段。每次查询时,服务器就会根据 Schema 验证并执行查询。

  Type关键字是用来定义抽象数据类型,类似于golang中的Type但是并不相同。在每一个自定义数据类型中,可以有多个Field(字段),每个Field可以再次指向某个Type。

  Scalar是解析到单个标量对象的类型,无法再进行次级选择(次级选择的含义在阅读GraphQL查询语法之后会有所了解)。GraphQL中包含的标量有String,Int,Float,Boolean,Enum,ID。

  与我们在其他语言中定义对象类似:下方Person这个自定义数据类型中包括了id、name等字段。

  上述People类型中只有标量字段,我们同样可以使用自定义数据类型字段,例如,我们定义了Film数据类型,每一部Film都有一个director字段:

  接口是一个抽象类型,相信学习过go和java的读者都不陌生,下面直接看定义:

  对于上面People类型中的name字段,假如我们想要让其不为空,则可以在数据类型后面添加感叹号!,如果我们要新增字段参演电影的列表films,则可以使用[]。

  任何返回一个SearchResult类型的地方,都可能得到一个 Person 或者 Film。注意,联合类型的成员需要是具体对象类型;不能使用接口或者其他联合类型来创造一个联合类型。

  在上面的people5和people1的查询中,我们发现,两者都查询了name,此时只有一个字段还好,如果相同字段过多时,那应该怎么办呢?这种情况下我们便可以使用fragment:

  片段的概念经常用于将复杂的应用数据需求分割成小块,特别是你要将大量不同片段的 UI 组件组合成一个初始数据获取的时候。

  上述所有查询,我们都使用了query关键字作为查询标识,虽然可以省略,但依然推荐这么加上。实际上,我们还可以为我们的查询定义名称,这对我们在开发过程中寻找可能存在的漏洞提供帮助。例如:定义一个名称为filmQuery的查询操作

  使用变量可以很方便的在客户端构造查询语法,客户端可以构造一个复选框,下拉菜单等方式来获取动态参数,然后将动态参数提取到查询之外,作为分离的字典传进去。而不用构建一个全新的查询。(为了安全起见,我们不能使用用户提供的值来进行字符串插值构建查询)

  上述介绍的全部都是查询操作,GraphQL也为我们提供了mutation变更操作,用于修改数据。

  当用户请求发送到服务器时,服务器如何进行相应并返回所需数据呢?下面介绍一下GraphQL的响应过程,以query查询为例:

  上述过程中大部分函数其实并不需要手动实现,这些操作对于我们来说相当于黑盒状态,我们接下来会介绍几个常用的GraphQL生成工具。

  关于GraphQL的相关内容就介绍到这里,如果想有进一步的了解,可以前往GraphQL官网进一步学习。

  其中gqlgen支持语法最多,我的另一篇文章中介绍了如何使用gqlgen构建graphql服务。

  本文将从GraphQL是什么,为什么要使用GraphQL,使用GraphQL创建简单例子,以及GraphQL实战,四个方面对GraphQL进行阐述。说得不对的地方,希望大家指出斧正。github项目地...博文来自:charming的博客

  随着系统业务量的增大不同的应用和系统共同使用着许多的服务api,而随着业务的变化和发展,不同的应用对相同资源的不同使用方法最终会导致需要维护的服务api数量呈现爆炸式的增长,比如我试着跑了下我们自己业...博文来自:初新的博客

  客户使用GraphQL查询语言向GraphQL服务发出请求。我们将这些请求源称为文档。一个文档可能包含operation操作(query查询和mutation变更都是操作)以及fragment(片段)...博文来自:kikajack的博客

  完整的教程完整标准查看这里完整标准的中文版淘宝前端团队的GraphQL入门教程GitHub的基于GraphQL的API接口示例各种语言版本(Java,PHP,Node等)的GraphQL服务端库1.G...博文来自:kikajack的博客

  计算机学科中有很多概念,例如编码(原码,补码,反码),虚拟内存,文件,IO, 编译,链接,分组交换,关系,事务,范式,Hash,加密。。。等等,本文试图讲一下最重要的核心集合,从这个集合当中就可以变换...博文来自:坤儿的博客

  软件系统,可看作由一组关注点组成。其中,直接的业务关注点,是核心关注点。而为核心关注点提供服务的,就是横切关注点。而封装各种横切关注点的类,就是切面。横切关注点与切面之间:横切关注点是切面中封装的各种...博文来自:yan_biubiu的博客

  本文首发于集智专栏此为系列首篇,旨在提供直观简明的深度学习引导,涵盖深度学习的基本概念,而不设计很多数学和理论细节。当...博文来自:集智-人工智能,机器学习

  写在前面在上一篇文章RPCvsRESTvsGraphQL中,对于这三者的优缺点进行了比较宏观的对比,而且我们也会发现,一般比较简单的项目其实并不需要GraphQL,但是我们仍然需要对新的技术有一定的了...博文来自:weixin_33991727的博客

  写在前面在上一篇文章RPCvsRESTvsGraphQL中,对于这三者的优缺点进行了比较宏观的对比,而且我们也会发现,一般比较简单的项目其实并不需要GraphQL,但是我们仍然需要对新的技术有一定的了...博文来自:weixin_34377919的博客

  英文原版地址:在本章中,你将了解GraphQL的一些基本语言结构。内容包括,初次认识,定义类型,查询和mutation的语法。我们还为你...博文来自:weixin_33824363的博客

  GraphQL渐进学习08-graphql-采用eggjs-服务端开发软件环境eggjs2.2.1请注意当前的环境,老版本的egg可能配置有差异目标创建graphql服务用户登录授权用户访问鉴权代码d...博文来自:会煮咖啡的猫咪

  模型在设计时表与表之间存在复杂关系,当我们在查询一个表数据时往往也要获取其他表的数据称之连接查询实现:1、建立表与表之间的关系2、设置查询时进行表连接3、声明查询内容包含(声明员工时,设置一个部门的属...博文来自:zdluoa的博客

  GraphQL渐进学习07-graphql-node-server-模块化目标为了便于维护,模块化node服务端代码代码抽取层次分为schema定义类型业务对象查询更改resolvers实现查询方法t...博文来自:会煮咖啡的猫咪

  1.Sping简介Spring是一个开源的框架,是为了解决企业应用程序开发的复杂性而创建的。该框架的主要优势是气良好的设计和分层架构,软件开发人员可以只选择Spring提供的某项技术,例如IOC,而...博文来自:zouliping123456的博客

  概述使用vue编写网页是一个让人愉悦的过程,它同时具备angular和react的优点,轻量级,api简单,文档齐全,简单强大,麻雀虽小五脏俱全.快速开始vue最好的方式是阅读官网的文档,这是学习vu...博文来自:廿四桥明月夜的博客

  Spring是J2EE开发中非常流行的框架,他最重要的两大基本功能是提供IoC容器和AOP概念的实现。这里介绍一下AOP,它的全名为Aspect-OrientedProgramming,可翻译为面向层...博文来自:zsh2050的专栏

  1.面向对象的三个基本特征是:封装、继承、多态。1.1封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信...博文来自:知 识 不 是 装 饰。

  Spark特点:大数据分布式计算框架,内存计算分布式计算内存计算中间结果在内存迭代容错性多计算范式四大核心扩展功能:SparkSQL:Sqlonhadoop系统,提供交互式查询、能够利用传统的可视化工...博文来自:徐志的博客

  一个GraphQL查询是一个字符串,它被发送给一个与数据模式无关的服务器,然后服务器返回JSON数据。GraphQL是强类型的,并避免了版本控制,同时提供了随着数据演进可以轻易改进查询语句的能力。In...博文来自:tao_wei162的博客

  为了更好的支持前端能够自由组合、展示收到的数据,笔者使用graphql-go框架开发了负责的模块,但测试过程中发现,使用GraphQL会有n+1query的问题。经过调研发现两种解决方案:使用grap...博文来自:phantom_111的博客

  GraphQL渐进学习06-graphql-采用-mockjs-mock数据目标开启graphqlmock数据模式采用mock.js组件进行数据模拟模拟数据配置对象接口自定义类型联合查询代码graph...博文来自:会煮咖啡的猫咪

  线程关于什么是线程我相信大家都知道,可是线程池可能还是有不明白的同学吧,这里我就简单介绍一下。线程池是一个“容器”,在我们使用线程的时候统一使用容器来创建并维护线程池,这样就有个好处我们的线程数量可以...博文来自:恒易科技

  DispatcherServletSpringMVC的前端控制器Servlet,所有到达请求的统一处理入口,具体的处理工作派发给所配置的其他SpringMVC组件。执行请求处理的其他SpringMVC...博文来自:冰山*消融*春游记

  现在在上一篇Vuex(一)--为什么要使用Vuex的理解基础上使用Vuex中的State,一个正面例子来证实,同时也介绍一下Vue核心概念State。Vuex使用单一状态树——是的,用一个对象就包含了...博文来自:muzidigbig的博客

  podPod直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod)。在k8s中我们不会直接操作容器,而是把容器包装成Pod再进行管理运行于Node节点上,...博文来自:blackcloud

  写一个GraphQL的小demo原教程(,本帖主要记录遇到的坑以及暂时的解决方法,顺便为以后的升级做准备...博文来自:huhao0829的博客

  1.镜像操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),就相当于是一个root文件系统。比如官方镜像ubunt...博文来自:404Code

  一、nearrealTime(NRT):近实时,从写入数据到数据可以搜索到有一个小延迟(一秒),基于es的搜索和分析可以达到秒级二、集群:包含多个节点,每个节点是属于哪个集群是通过一个配置(集群名称,...博文来自:hnjsjsac的博客

  本文使用Maven从零开始构建一个SpringBoot应用,以发布一个支持GraphQL的Web服务器。1.执行mvnarchetype:generate可以选择模板(但是已有的模板往往跟不上技术的进...博文来自:成长的足迹

  〇、什么是SpringBoot以及为何要用它?SpringBoot是为了解决传统Java开发配置繁多、效率低下、部署复杂以及集成第三方技术难度大等缺点而诞生的。其核心功能有:1.可以以jar包独立运行...博文来自:KittyGirl

  参考资料GitHub官方的资源限制相关(节点限制和速率限制)的文档1.资源限制资源限制,需要在服务端实现。1.1节点限制每次调用必须加节点数的限制,否则当数据量过大时会出问题。1.1.1GitHub的...博文来自:kikajack的博客

  (点击上方公众号,可快速关注)作者: 邹润阳在最近半年中,LeetCode的一些新功能已经开始...博文来自:前端大全

  最近学习JavaNIO的相关知识,为了以后方便复习,记录下主要知识点。参考来源:某视频中的讲解以及一些博文,见文章结尾。一、JavaNIO基本介绍JavaNIO(NewIO,也有人叫:NonBlock...博文来自:pcwl_java的博客

  几年前,我在DocuSign带领了一个开发团队,任务是重写一个有数千万个用户在使用的Web应用程序。当时还没有可以支持前端的API,因为从一开始,Web应用程序就是一个.NET大单体。西雅图的API团...博文来自:hellozhxy的博客

  Docker的三大核心概念分别是镜像、容器、仓库。Docker运行容器前需要本地存在对应的镜像,如果本地没有对应的镜像,Docker会尝试从默认的镜像仓库下载。当然用户也可以通过配置,使用自定义...博文来自:xiaofeixia666888的博客

  1.当我们发现无法联网时,我们运行下面命令或者ping命令 ip  addr 结果没有显示局域网的IP地址 2.我们去修改网卡配置文件,把网络连接打开 cd / cd  /etc/sys...博文来自:sfeng95的博客

  在我刚刚过去的研究生毕设中,我在ImageNet数据集上验证了图像特征二值化后仍然具有很强的表达能力,可以在检索中达到较好的效果。而Bengio大神的这篇文章,则不止于将特征二值化,而是要将权重和每层...博文来自:雨石

  原文地址:因为需要用,所以才翻译了这个文档。但总归赖于英语水平很有限,翻译出来的中文有可能...博文来自:ymj7150697的专栏

  Unity一键打包工具,一键生成几十个平台/渠道的安装包。博文来自:夜风的BLOG

  注1:RUtils是我偶然发现的一个工具包,它建立在Rserve之上,可以很大程度上简化我们的程序,关于Rserve网络上有很多相关的内容,这里不对其进行介绍,比如这里:博文来自:竹叶青的专栏

  好长时间之前做过的一个项目 , 其中设计到用Unity模拟卡拉OK歌词过渡的效果 , 如下图所示 ↓ , 这里简单把原理部分分享一下. 演示效果 ↓ 实现歌词动态调整功能 实现动态读取歌...博文来自:月儿圆

  docx4j官方提供了一些例子,本文只是其中一部分应用的简单例子。需要注意的地方是页眉和页脚,必须创建对应关系才能起作用。页眉和页脚添加图片的时候,第二个参数sourcePart是必须的,调用的cre...博文来自:偶尔记一下

  扫二维码关注,获取更多技术分享 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  推荐 分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!推荐...博文来自:strongerHuang的专栏

  Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread...博文来自:u011860731的专栏

  这篇文章要表达的并非数据库相关的知识,而是如何使用DBIOWrapper。       DBIOWrapper是一个工作在Windows下、对ODBC式数据访问进行了小型封装的库。其设计目标是提供极简...博文来自:哈哈 哈 哈哈,哈 哈 哈哈哈

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  安装oracle 9i后,居然把刚刚更改的数据库管理员密码给忘了,又不重新安装,太麻烦了,试了好久,终于修改成功了。1、运行到C盘根目录2、输入:SET ORACLE_SID = 你的SID名称3、输...博文来自:llxsharp的专栏

  Cocos2d-x 2.2.3 使用NDK配置编译环境2014年6月11日 Cocos2d-x 3.0以下的开发环境的配置恐怕折磨了很多人,使用cygwin配置编译环境足够让初学者蛋疼一阵子了。本篇博...博文来自:巫山老妖

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  摘要:为了协助处理器完成初始化和控制系统操作,80x86提供了一个标志寄存器和几个系统寄存器。Eflags用于控制任务切换、中断处理、指令跟踪和权限访问。系统寄存器用于内存管理和控制处理器操作。 1...博文来自:河西无名式

  题目点评 数据类型是所有程序都会涉及到的,是计算机语言比较基础知识,这种问题被问到的可能性其实并不大,这样的题目只要花点时间把它记下来就好了,难易程度一般。  两大类: 栈:原始数据类型(Und...博文来自:雄领IT的专栏

  今天在本地做了修改,后来又不想要这次修改的内容,想要还原到修改之前的状态,有一个比较省力的方法,直接从git服务器对应的分支获取覆盖本地的程序。 命令如下:git checkout -f 这样就...博文来自:leedaning的专栏

  有时我们需要绘制热图,用x轴、y轴表示两维数据,用颜色表示第三维 第一步:需要准备三列数据,如图1,这里我用U表示x轴数据,它的取值范围为[0-1],间隔为0.05,E表示y轴,取值范围也是[0-1]...博文来自:SunCherryDream的专栏

  本文介绍如何使用VS2015作为编译开发环境,调用OpenCV3.31和Qt5.9.1写图像处理的GUI。 1.目录结构 假设我们要创建一个名为VideoZoom的工程,那么首先按下图构建目录结构...博文来自:zhhp1001的博客

本文链接:http://acrylinkg.com/jiekouzhuti/274.html

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top