GraphQL入门

文档背景

最近看到一种新的数据交互语言感觉很有意思。区分于普通关系型数据库和NoSQL数据库。
它是一种RestFul的的接口型查询语言。
于是来由浅入深的学习一下。

1、什么是GraphQL

GraphQL 是由 Facebook 创造的用于描述复杂数据模型的一种查询语言。这里查询语言所指的并不是常规意义上 的类似 sql
语句的查询语言,而是一种用于前后端数据查询方式的规范。
它不是一种数据库工具,而是一种规范,被定义好的规范,需要我们通过多种多样的代码去实现GraphQL。
官网(中文):https://graphql.cn/
规范地址:http://spec.graphql.cn/

1、1 进一步了解GrapQL

最具有特点的就是按需索取数据,避免浪费
在这里插入图片描述

2、查询规范

GraphQL定义了一套规范,用来描述语法定义,具体参考:http://graphql.cn/learn/queries/
更多规范:http://graphql.cn/learn/queries/

2.1、字段(Fields)

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

在这里插入图片描述

2.2、参数(Arguments)

在查询数据时,离不开传递参数,在GraphQL的查询中,也是可以传递参数的,语法:(参数名:参数值)

在这里插入图片描述

2.3、别名(Aliases)

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

在这里插入图片描述

2.4、片段(Fragments)

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

在这里插入图片描述

3、GraphQL的Schema 和类型规范

Schema 是用于定义数据结构的,比如说,User对象中有哪些属性,对象与对象之间是什么关系等。
参考文档:http://graphql.cn/learn/schema/

3.1、Schema定义结构

schema { #定义查询
    query: UserQuery
}
type UserQuery { #定义查询类型
    user(id:Long) : User #指定对象以及参数类型
}
type User { #指定对象
    id:Long! # !表示该属性是非空选项
    name:String
    age:Int
    card:Card # 指定该属性是一个对象类型
}

type Card{
    cardNumber:String
    userId:Long
}

3.2、标量类型(Scalar Types)

GraphQL规范中,默认定义了5种类型:

  • Int :有符号 32 位整数。
  • Float :有符号双精度浮点值。
  • String :UTF‐8 字符序列。
  • Boolean : true 或者 false 。
  • ID :ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键。

规范中定义的这5种类型,显然是不能满足需求的,所以在各种语言实现中,
都有对类型进行了扩充,也就是GraphQL支持自定义类型,比如在graphql-java实现中增加了Long、Byte等。

3.3、枚举类型

枚举类型是一种特殊的标量,它限制在一个特殊的可选值集合内。

在这里插入图片描述

3.4、接口

跟许多类型系统一样,GraphQL 支持接口。一个接口是一个抽象类型,它包含某些字段,而对象类型必须包含这
些字段,才能算实现了这个接口。

在这里插入图片描述

4、Java代码实现GraphQL

我们对GraphQL有了解,官方只是定义了规范并没有做实现,就需要有第三方来进行实现了,关于GraphQL的java实现有几种,我们选择使用官方推荐的实现:graphql-java,我们通过该实现就可以编写GraphQL的服务端了。
官网:https://www.graphql-java.com/
github:https://github.com/graphql-java/graphql-java

伪造数据Demo URL: https://gitee.com/yi-yunlong/itcast-graphql-java.git
数据库交互Demo URL:https://gitee.com/yi-yunlong/itcast-haoke-manage.git

项目开发中使用到GraphQL的流程大约是这样。灵魂画手,只画精髓。
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值