专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

GraphQL简介

  简介
  随着Web和移动应用程序变得越来越成熟和复杂,软件工程师发明了巧妙的新方法来改善应用程序中客户端和服务器之间的交互。在过去的几年里,在这方面最大的范式转变之一是GraphQL,一种用于操作API的开源查询语言和运行时。GraphQL由Facebook于2012年设计(并于2015年公开发布),旨在通过制作一个声明式、客户端驱动和高性能的新系统来解决传统REST架构的各种弱点。
  在本文中,您将了解GraphQL是什么,熟悉GraphQL的重要术语和概念,并发现GraphQL规范与REST架构风格相比如何。GraphQL是什么?
  GraphQL代表图形查询语言,但与其他查询语言(如SQL(结构化查询语言))不同,它不是一种直接与数据库通信的语言,而是一种定义客户端与API服务器通信的契约的语言。GraphQL规范是一个描述语言规则和特征的开放标准。它还提供了执行GraphQL查询的说明。
  由于GraphQL是由开放标准定义的,因此没有正式的GraphQL实现。GraphQL实现可以使用任何编程语言编写,与任何类型的数据库集成,并支持任何客户端(例如移动或Web应用程序),只要它遵循规范中概述的规则即可。最流行的商业GraphQL实现之一是ApolloGraphQL,它吹捧了几个GraphQL客户端和服务器实现,但没有必要使用Apollo来使用或理解GraphQL。GraphQL特性
  GraphQL设计有几个关键特征。GraphQL查询是声明性和分层的,而GraphQL模式是强类型和内省的。Declarative声明
  GraphQL查询是声明性的,这意味着客户端将准确声明它感兴趣的字段,并且响应将仅包含这些属性。
  此示例针对假设的幻想游戏API的GraphQL查询请求ID为1的向导,并请求该对象的名称和种族字段。{wizard(id:1){namerace}}
  以JSON格式返回的响应将返回一个数据对象,其中包含找到的向导对象,其中包含查询请求的两个字段。{data:{wizard:{name:Merlin,race:HUMAN}}}
  由于GraphQL响应只为您提供所需的确切信息,因此与始终提供完整数据集的替代方案相比,它会产生更高效、性能更高的网络请求。Hierarchical层次
  GraphQL查询也是分层的。返回的数据遵循查询的形状。在此示例中,查询已扩展为包括法术,并请求每个法术的名称和攻击字段。{wizard(id:1){namespells{nameattack}}}
  响应现在将包括与此特定向导关联的所有拼写对象的数组。尽管向导和咒语可能存储在单独的数据库表中,但它们可以通过单个GraphQL请求获取。(但是,GraphQL对数据本身的存储方式并不固执己见,所以这是一个假设。{data:{wizard:{name:Merlin,spells:〔{name:LightningBolt,attack:2},{name:IceStorm,attack:2},{name:Fireball,attack:3}〕}}}Stronglytyped强类型
  GraphQL是强类型,如GraphQLType系统所述。类型描述了GraphQL服务器中值的功能。大多数程序员都熟悉GraphQL类型,具有字符串、布尔值和数字整数等标量(基元值),以及对象等更高级的值。
  本示例创建一个拼写对象类型,其中包含与字符串和Int标量类型对应的字段。typeSpell{name:String!attack:Intrange:Int}
  GraphQL模式是使用类型系统定义的,它允许服务器在尝试查询数据之前确定查询是否有效。GraphQL验证确保请求在语法上正确、明确且无错误。Selfdocumenting自我记录样式
  内省功能允许GraphQL客户端和工具查询GraphQL服务器以获取底层模式的形状和数据。这允许创建诸如GraphiQL、用于处理GraphQL查询的浏览器内IDE和游乐场等工具,以及其他用于自动生成文档的工具。
  例如,您可以通过schema通过此自省功能了解有关咒语类型的更多信息。{schema{types{namekinddescription}}}
  响应也将像任何其他GraphQL响应一样是JSON。{data:{schema:{types:〔{name:Spell,kind:OBJECT,description:Apowerfulspellthatawizardcanreadfromascroll。}〕}}}Clientdriven客户端驱动
  开发GraphQLAPI的工作发生在后端,其中模式是定义和实现的。但是,由于GraphQLAPI的所有功能都包含在服务器上的单个端点中,因此由客户端通过声明性查询来决定它到底需要哪些数据。这使开发人员能够快速迭代,因为前端开发人员可以继续查询GraphQLAPI公开的数据,而无需执行任何其他后端工作。Architecture架构
  GraphQL存在于客户端和数据之间的应用层中。GraphQL服务器描述API中公开的功能,客户端描述请求的要求。Server服务端
  GraphQLAPI由单个端点定义,通常是graphql端点,可以访问GraphQL服务器的全部功能。由于GraphQL是一种应用层技术并且与传输无关,因此它可以通过任何协议提供服务,但最常见的是通过HTTP提供。
  GraphQL服务器实现可以使用任何编程语言编写,例如expressgraphql中间件,它允许您在NodeExpressHTTP服务器上创建GraphQLAPI。GraphQL也是与数据库无关的,应用程序的数据可以存储在MySQL、PostgreSQL、MongoDB或任何其他数据库中。数据甚至可以由多个传统RESTAPI端点的聚合提供。重要的是数据是在GraphQL模式中定义的,该模式通过描述可供查询的数据来定义API。Client客户端
  向GraphQL服务器发出的请求称为文档,由查询(用于读取请求)和突变(用于写入请求)等操作组成。
  虽然有高级的GraphQL客户端,如ApolloClient或Facebook的Relay,它们提供了缓存机制以及额外的工具,但不需要特殊的客户端来向GraphQL服务器发出请求。一个简单的XMLHttpRequest或从Web浏览器获取就足以通过将GraphQL文档发送到GraphQL服务器来发出请求。
  下面是一个到graphql端点的获取请求示例,该端点将GraphQL文档作为字符串传递到POST请求的正文中。asyncfunctionfetchWizards(){constresponseawaitfetch(graphql,{method:POST,headers:{ContentType:applicationjson,},body:JSON。stringify({query:{wizards{idname},},}),})constwizardsawaitresponse。json()returnwizards}fetchWizards()
  这将返回请求的JSON响应。{data:{wizards:〔{id:1,name:Merlin},{id:2,name:Gandalf}〕}}GraphQLvs。REST
  GraphQL和REST不是可互换的概念,但它们解决了类似的应用程序问题。REST代表具象状态传输,是一种用于在不同系统之间共享数据的软件架构风格。RESTfulAPI是遵循REST原则和约束的API,包括无状态、可缓存、在客户端和服务器之间强制分离关注点,以及具有统一的接口(例如通过URI)。如前所述,GraphQL是用于执行查询的查询语言和运行时的规范。
  这两个系统都有优点和缺点,并且在现代API开发中都有其用途。然而,GraphQL的开发是为了对抗REST系统的一些弱点,并创建一个更高效的、客户端驱动的API。Architecture架构RESTAPI通常由服务器上的多个端点定义,但GraphQL通过单个端点交换数据。GraphQL端点可以返回可能需要多个REST查询的复杂数据图,从而减少单个视图通过网络的请求数量。Datafetching获取数据RESTAPI返回在服务器上确定的数据集。这可能是太多的数据,例如,如果视图只需要响应中的一个属性,或者可能还不够,例如列表终结点不返回表中表所需的每个属性。GraphQL防止这种情况通过声明性查询过度和不足地获取数据。ErrorHandling错误处理由于GraphQL没有必要通过HTTP提供,因此没有关于使用HTTP响应代码处理错误的规范。通常,所有GraphQL端点都将使用200HTTP代码响应进行解析,失败的结果将在响应中的数据属性旁边包含一个错误属性。另一方面,RESTfulAPI使用不同的400级HTTP代码来处理客户端错误,并使用200级HTTP代码来成功响应。Versioning版本管理GraphQLAPI努力向后兼容并避免中断性更改,这与版本控制端点的常见REST模式形成鲜明对比,通常在URL本身中使用v1或v2来确定版本。但是,可以使用GraphQL实现自己的版本控制,或者使用REST通过演进实现版本,只是不那么传统。Caching缓存可缓存性是REST指导约束的一个组成部分。由于基于HTTP的RESTAPI由使用不同HTTP方法的多个终结点组成,因此它可以利用现有的HTTP约定进行缓存并避免重新获取资源。由于基本上每个GraphQL请求都是不同的,但使用单个端点,因此它无法利用任何内置的HTTP缓存机制。GraphQL客户端可以利用全局对象识别来启用简单缓存。
  这个列表并没有涵盖REST和GraphQL之间的所有异同,但总结了许多最关键的点。此外,GraphQL可以用作聚合多个REST端点或服务的网关,在这种情况下,这两种技术可以并排使用。
  特征
  GraphQL
  REST
  描述
  GraphQL是一种用于API的查询语言,也是服务器端运行时
  用于设计Web服务的体系结构样式
  DataFetching获取数据
  响应确定性查询的单个HTTP终结点
  一组通常返回预定数据集的HTTP终结点Versioning
  版本管理
  不鼓励版本控制
  常见版本控制
  HTTP状态码
  所有响应(包括错误)通常为200
  实现HTTP状态代码
  Validation
  内置元数据验证
  必须手动实施验证
  Documentation
  内置过孔类型系统和自省
  不是自我记录的,像OpenAPI这样的工具可用Caching
  缓存
  无
  有
  请求方法
  查询、更改和订阅(通过HTTP的POST)
  使用的所有HTTP方法(GET,POST,PATCH,PUT,DELETE等)
  响应内容类型
  JSON
  Any(JSON,XML,HTML,etc。)总结
  GraphQL是一种开源查询语言和API运行时。GraphQL由Facebook的开发人员发明,旨在通过为API制作客户端驱动的声明性查询语言来解决传统RESTAPI遇到的各种问题,例如获取数据过多不足和网络请求效率低下。
  虽然GraphQL不是与REST互换的概念,但它们都描述了管理客户端和服务器之间通信的不同方法。在本文中,您了解了GraphQL是什么,GraphQL和REST之间的主要区别和相似之处,以及GraphQL服务器如何向客户端公开数据。

海南牵头的25个全岛封关运作第一批项目进展顺利确保今年封关运作项目主体工程完工海南日报记者傅人意通讯员王强1月6日,历经半年时间建设的琼海博鳌机场二线封关口岸项目顺利实现封顶,成为海南自贸港首个封顶的封关运作项目。全岛封关运作项目建设是海南自由贸易港建设的标关于延续实施有关个人所得税优惠政策的公告为支持我国企业创新发展和资本市场对外开放,现就有关个人所得税优惠政策公告如下一财政部税务总局关于延续实施全年一次性奖金等个人所得税优惠政策的公告(财政部税务总局公告2021年第42负荷管理?一场滑稽而丑陋的闹剧!负荷管理如今已经慢慢被接受认可,已经成为常态!球星想打就打,不想打就不打,甚至主教练在赛前都不知道一名球员到底上场不上场,这样的情况,无怪于一些NBA名宿称负荷管理就是滑稽的闹剧!CBA深圳队内线沈梓捷受到肩伤困扰北京青年报记者16日获悉,深圳队主要内线沈梓捷近期受到左右肩膀伤病的不利影响,曾经到赛区指定医院进行核磁共振检查,结果发现左肩袖冈上肌腱损伤,伴有左肩关节囊少量积液。这些伤病有可能狂砍3064,莱昂纳德打爆火箭!惨遭10连败,小马丁成最大亮点!今天火箭客场挑战洛杉矶快船,本场比赛快船的乔治肯纳德沃尔和小莫里斯4人全都因伤缺阵。火箭这边小波特因为脚踝伤势不打,泰特和杰伦格林被禁赛一场同样缺席。首节比赛,火箭就非常主动和对手工厂车间无线覆盖解决方案,工厂网络覆盖不再难前言大家好,我是林总,很多朋友多次提到关于工厂无线覆盖方案,工厂的项目现在越来越多,我们很多朋友都接触到了这类项目,所以今天我们来详细了解下工厂无线覆盖的方案。正文无线局域网(WL果粉必看!苹果官方给出iPhone电池保养6个小技巧手机中国新闻对于手机来说,电池扮演着心脏的角色,它决定了手机是否能够正常工作以及工作的时间。而在众多手机用户中,大部分苹果用户都非常关心自己的iPhone电池健康。你的iPhone(外代二线)米兰男装周安普里奥阿玛尼品牌时装秀(5)(外代二线)米兰男装周安普里奥阿玛尼品牌时装秀1月14日,模特在意大利米兰男装周上展示安普里奥阿玛尼品牌的202324秋冬新款服装。新华社美联1月14日,模特在意大利米兰男装周上展小米历代顶级旗舰演化史(包含Mix系列)自从2015年一月份的小米Note顶配版首冲高端失败了之后,小米的旗舰战略正式开始改变。所以,和5S一同发布的5SPlus以及之后的小米6就都开始涨价了。此间,小米开辟了全新的Mi送礼送到心坎上,超级影视SVIP这波春节福利我先收了作者糖炒山楂很适合春节一大家子用这个升级非常可,都给我按这个标准卷小年已过,春节的氛围越来越浓。作为文娱消费的高点,以及经典合家欢场景下大众对客厅的回归,市场正在对大屏会员内容权益国产内存比肩国际一线,阿斯加特DDR5,高调迈进7800MHz俱乐部国产内存比肩国际一线,阿斯加特DDR5,高调迈进7800MHz俱乐部如果在五年前(2018年)DIY过电脑的朋友们,一定对当年的内存硬盘价格心有余悸,要知道当时普普通通的DDR4内
科莫多巨蜥的毒液到底有多可怕?2009年,一名31岁的渔民安瓦尔,在印尼科莫多岛上采摘水果,结果不小心从水果树上掉了下来,刚好踩到了一只巨型蜥蜴,蜥蜴瞬间就朝他扑了过去,咬住了他的腿,之后又咬住了他的手臂,身体武汉未来的房价会涨到100000元平米吗?这个问题的答案是肯定的!以目前的趋势,未来武汉房价必然达到10万的水平,只是时间长短的问题。2010年至2017年,短短七年间,武汉的房价已经翻了3番,目前,武汉部分高端楼盘如洞庭兰州青白石片区,中央公园怎么样?兰州北拓的黄金区域,目前基础交通还跟不上建设需要,交通滞后可能会成为十四五期间兰州青白石片区发展的的最大障碍!不过就兰州地理位置和城区格局而言,青白石片区是离主城区最近的待开发区域农民为什么不在国家统计失业范围之内?中国有四个儿子,大儿子叫工人,二儿子叫子弟兵,三儿子叫公务员,四儿子叫农民,所以四儿子就没有纳入统计失业包括养老金范围,因为四儿子有金山银山还有三分地。农民有土地,这是农民可以赖以农村成立社区是什么意思?很多农村驻有村委会办公室,同时也驻有社区管理委员会办公室,特别是在城市郊区的农村和街道的农村都同时设立了村委会和社区管理委员会,很多人弄不明白是怎么回事。那农村成立社区是什么意思呢农村里的剩男,为何一剩再剩呢?到底是什么原因?男女比例失调。计划生育只要一个孩子时,受封建思想影响,都拚命要男孩,等他们长大了,很难找到媳妇。一,农村姑娘远嫁,二,女孩见少,三,彩礼高,四,剩男挣钱少。我就一大龄剩男!个人亲身抖音付费直播试水,看直播要给钱了?我们应该如何思考?使劲收,最好是家人们看的话,一分钟100块钱。毕竟粉丝听话的很。毕竟人设都设计好了打PK,卖货摆错价格,怒亏2个亿回馈粉丝。没事就怼工厂,怼员工反正就是赔钱回馈粉丝。赔完还得补交税马上就要退休了,退休工资才3650元太少了,怎么办?3600不少了。我企业工龄32年,退休时退休金只有2200,涨了这么多年还不到3000。知足常乐吧!如果身体不好,这些钱也够生活了,如果身体还可以,就找一些力所能及的工作,打打工补南宁五象新区未来的发展潜力很大吗?五象新区无法成为国家级新区!!!目前看来,五象新区的潜力也就这样了。我们对比一下贵阳的贵安新区,贵安新区的面积是1700平方公里,由贵阳市的郊区和安顺市合并得来。是全国第8个国家级如果把三峡大坝加高10米,截留更多的洪水,可行吗?我国的三峡大坝,作为当今世界上最大的水利枢纽工程,位于湖北省宜昌市上游,距下游葛洲坝水电站38公里,三峡大坝全长2309米高185米,呈梯形形状,集发电旅游航运调控洪水于一身。三峡大家有经历过亲人去世吗?是怎样走出痛苦和想念的?2018年9月1日下午3点8分,我的妻子在医院里停止了呼吸。她的眼睛没有闭上,我流着泪,帮她合上了双眼。我永远失去了我最亲近的爱人,孩子永远的失去了妈妈。一位好妻子,好女儿,好姑妈
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网