GraphQL(三)

一、改造定义的方式

把类型的定义改造成构造类型的定义:

在之前都用的是type { },里面跟的是字段。构造形式是借助GraphQLObjectType这个函数来定义,将字段定义在fields中,并且每个字段中都有type。

好处:方便维护,使用字符串定义的如果出错了,不好维护。例如:我们的定义的字符串非常的长,但是他报错的时候就只会报buildSchema这一行出错。

如果改成这种构造函数类型的话,哪里出错就会知道是那个type出错。

1、使用GraphQLObjectType定义type(类型)



2、使用GraphQLObjectType定义query(查询)



3、创建Schema



也就是把之前的定义Schema分成了三个步骤来完成,这样是非常便于维护的。

二、查询与变更

这里我们引入官网的例子来进行说明,首先去github上面克隆代码。

1.克隆代码:git clone https://github.com/apollographql/starwars-server

2. 进入根目录 : cd starwars-server

3. 安装包 :npm install

4. 启动项目 : npm start

字段

在GraphQL的查询中,请求结构中包含了所预期结果的结构,这个就是字段。并且响应的结构和请求结构基本一致,这是GraphQL的一个特性,这样就可以让请求发起者很清楚的知道自己想要什么。


这里在请求的时候,默认的是query,这里也可以不写query,使用{ }直接进行查询,但是这样查询就相当于我们js中的匿名函数一样,所以我们可以在查询的时候去给他起个名字。如果我们有很多的query没有定义的话,在代码中就不方便去找到它,起个名字就能方便的定位到它。

别名

如果一次查询多个相同对象,但是值不同,这个时候就需要起别名了,否则json的语法就不能通过了。





可以看出,两个 hero 字段将会存在冲突,但是我们可以给他另取一个别名,我们也就可以在一次请求中得到两个结果。

当然我们也可以给hero里面的字段起个别名:


片段

查询的属相如果相同,可以采用片段的方式进行简化定义。


采用片段形式进行查询


我们使用片段的方式查询了重复的字段。片段的概念经常用于将复杂的应用数据需求分割成小块,特别是将大量不同片段的 UI 组件组合成一个初始数据获取的时候。

变量

一般情况下,我们将参数写在了查询字符串内。但是在很多应用中,字段的参数可能是动态传递的。如果将这些动态参数直接传进查询字符串并不好,GraphQL可以将动态值提取到查询之外,然后作为分离的字典传进去。这些动态值即称为变量。


传递参数的时候,可以使用QUERY VARIAVBLES 里面进行定义。


由于这里的Episode是枚举类型,由于这里的枚举类型只定义了三种形式,所以它的值只能是这三种类型。我们可以按shift+空格键 来查看这里需要填写的内容。


变量和参数的区别

参数:放在字段后面,用来定制化的查询字段。

变量:服务于参数,解决参数不是写死的,而是用户传递进来的。

变更

Mutation的中文意思就是“修改,变更”。任何查询都可以被实现为导致数据写入。建立一个约定来规范任何导致写入的操作都应该通过变更(mutation)来发送。


mutation会返回一个对象,之后可以继续查询返回的对象。修改数据后,可以在同一个请求中查询修改后的数据。

内联片段

GraphQL schema 具备定义接口和联合类型的能力。如果要查询的字段返回的是接口或者联合类型,那么可能需要使用内联片段来取出下层具体类型的数据:


hero这个查询返回的Character是一个接口类型,Human和Droid实现了这个接口。这样Human和Droid就会有Character所有的字段,同时它也有它自己的字段。但是由于hero它返回的类型是Character,所以我们只能查询Character上面的字段,如果查询Droid自己的字段时,就会报错。


因此,这里使用内联片段来进行查询。


元字段

当我们不知道要 GraphQL 服务中获得什么类型,这时候就需要一些方法在客户端来决定如何处理这些数据。GraphQL 允许在查询的任何位置请求 __typename,一个元字段,以获得那个位置的对象类型名称。
例如:下面这个union类型中的Human、Droid、Starship之前没有任何关联。


并且Human、Droid、Starship没有一个具体的返回字段,我们可以使用__typename来查看返回的具体的类型。


然后根据这个返回的类型来定义片段,进行查询。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值