数据结构论坛

注册

 

发新话题 回复该主题

使用GraphQL定制数据结构 [复制链接]

1#
北京中科白癜风医院爱心接力不忘初心 https://m.39.net/disease/a_5970563.html

了解什么是GraphQL、GraphQL的基础语法以及如何在项目中使用GraphQL

GraphQL是一种面向API的查询语言。通过应用GraphQL,客户端开发者不必直接与后台API接口打交道,而是通过向GraphQL声明所需数据结构,从而索取目标数据。GraphQL的引入能够有效提高客户端的开发效率,使客户端的开发者不再受限于服务器提供的接口,而是能够根据业务需求自由定制需要的数据内容。

GraphQL现已被较多开发团队所采用,如Facebook、Twitter、GitHub、Coursera等。

GraphQL介绍

GraphQL作为查询语言,开发者通过声明其所需要的数据格式,向GraphQLService发起请求并取得对应的数据。在传统的客户端/服务器通信过程中,客户端向服务器发送网络请求,服务器收到请求后执行相应操作并返回数据。下图展示了未引入GraphQL的系统结构:

引入GraphQL后,客户端不再与服务器直接通信,而是通过GraphQLService获取数据。下图展示了引入GraphQL的系统结构:

下图展示了从多个service请求特定数据时,引入GraphQL的前后对比:

与传统的客户端/服务器通信模式相比,GraphQL的引入为整个系统增加了一个中间层,屏蔽了前后端的具体数据结构。其主要优势包括以下几点:

定制所需的数据:客户端可以定制自己想要的数据结构。通过在请求中声明所需的数据结构,从GraphQLService中获取想要的数据。Service返回的数据结构将与客户端的请求完全一致,从而减少冗余数据的传输。在不使用GraphQL的情况下,返回的数据格式不受客户端控制。单个请求获取多个资源:在GraphQL中,客户端不再关心请求的来源,而是直接将需要的资源写入请求字段。在不使用GraphQL的情况下,当需要从不同的Service取得数据时,客户端开发者需要对不同的Service发起请求。结构即文档:GraphQL具有友好的调试界面,开发者可直接在该界面中查询GraphQL提供的服务。这种数据结构即文档的显示方式,使开发者能够方便快捷地查找所需要的数据类型。订阅功能:GraphQL提供订阅功能,使得客户端能够监听数据变化,让GraphQLService能够主动将变动的数据推送至客户端,实时在界面上进行显示。GraphQL语法简介

GraphQL拥有一套自己的语法规则,对用户所使用的具体开发语言并不做限制。

GraphQL的基本类型

GraphQL中预定义了以下几类基本类型:

Int:有符号的位整数,如1,-等。Float:有符号的双精度浮点值,如1.等。String:字符串,如helloworld等。Boolean:true/false。ID:一个唯一标识符,如对象中的key等。其序列化方式与String相同,但定义为ID时通常表示该类型不需要具备可读性,如一串哈希值等。在GraphQL中自定义类型

用户可以利用这些基本类型定义自己在项目中实际需要的类型,定义规则与JSON类似/p>

typeTypeName{KEYYPE[DECORATE]...}

大括号中的各行遵循KEYYPE的模式,其中KEY为该类型所包含的键,可以为任意字符串;TYPE为KEY的类型,可以是GraphQL中预定义类型中的任意一种,也可以是用户定义好的其他自定义类型。假设我们需要定义一个课程类型Course,该类型包含课程ID(id)和课程名称(name)等信息,我们可进行如下定义:

typeCourse{id:IDname:String}

假设我们的Course还包含一条评论信息

分享 转发
TOP
发新话题 回复该主题