GraphQL简单学习之springboot-2-常见用法

一、Query

有必要记住的是,除了作为 schema 的入口,Query 和 Mutation 类型与其它 GraphQL 对象类型别无二致,它们的字段也是一样的工作方式。

在简单学习-1里面,我们搭建了一个springboot项目,并且引入了graphiql的jar,这样,我们就可以使用GraphiQL进行开发和测试了。

开发和测试的代码,我们已经在项目中写入了。下面看下如何使用GraphiQL进行测试!

http://localhost/graphiql

最右面相当于接口文档,最左边可以查看历史!中间是操作的过程,以及结果!

4704db861f0d96dd04f1d9daccc23ddd083.jpg

7a81ba3c04a100ddefe94e5822eb9667ae7.jpg

d87c64c4bdfc92ec9859760a704b673c162.jpg

a87afd71cc8368090fe0239f1485b456542.jpg

f932a58167b96e70181eb86815f95ff9eb4.jpg

注意事项:查询时,直接按照上面的写法就可以了!

二、Mutation

注意事项:改变操作时,必须要写mutation的声明!

c65cb7f01869abf1f46cbfe64ff77c17333.jpg

2c4681a2318a6eaeb3554b55b9213b7f8d1.jpg

41a792d9fee5076bbc56a62600aa8c1bf02.jpg

注意事项:对于传入对象的情况,我们可以使用变量进行赋值! 【BookInput也是一种输入类型!!】

9aa3a8c6fe6231a1848ebcc6d43a62d9ff0.jpg

842347e25d8849e910e7738c20b0aa627d8.jpg

d9a02a5b94ef2d12be8157921c67e102811.jpg

三、其他的操作

1.别名

9fa38a4efc30a6d0ad12ccb15faa707f6ed.jpg

2.片段

片段使你能够组织一组字段,然后在需要它们的的地方引入

9173d8bddbb2daf1100903d666775dcc474.jpg

3.操作名称

操作类型可以是 querymutation 或 subscription,描述你打算做什么类型的操作。操作类型是必需的,除非你使用查询简写语法,在这种情况下,你无法为操作提供名称或变量定义。

操作名称是你的操作的有意义和明确的名称。它仅在有多个操作的文档中是必需的,但我们鼓励使用它,因为它对于调试和服务器端日志记录非常有用。

下面的示例包含了作为操作类型的关键字 query 以及操作名称 getAuhtor:

38cf5618d1a1d8bff68cc71c5a5dc654b7f.jpg

4.变量

所有声明的变量都必须是标量、枚举型或者输入对象类型。所以如果想要传递一个复杂对象到一个字段上,你必须知道服务器上其匹配的类型。可以从Schema页面了解更多关于输入对象类型的信息。

4d11923628a58d4e61cca37dda67d51f7af.jpg

ecac026e87361a58857e74ed90e59c83de3.jpg

5.指令

一个指令可以附着在字段或者片段包含的字段上,然后以任何服务端期待的方式来改变查询的执行。GraphQL 的核心规范包含两个指令,其必须被任何规范兼容的 GraphQL 服务器实现所支持:

  • @include(if: Boolean) 仅在参数为 true 时,包含此字段。
  • @skip(if: Boolean) 如果参数为 true,跳过此字段。

指令在你不得不通过字符串操作来增减查询的字段时解救你。服务端实现也可以定义新的指令来添加新的特性。

0b1036797c52c62e9fdeace764b370b8560.jpg

50392beefd7e6bb04837ed512b5953c8f42.jpg

6枚举类型

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

  1. 验证这个类型的任何参数是可选值的的某一个
  2. 与类型系统沟通,一个字段总是一个有限值集合的其中一个值。

建立一个枚举类:

public enum CountryEnum {
    USA,CHINA;
}

在schema.graphqls中加入:

enum CountryEnum {
    CHINA
    USA
}

在root.graphqls中的type Query加入:

    #### 测试枚举 ####
    testEnum(country: CountryEnum!): String!

73cbfc2540402d4bb478dc1895126757b7b.jpg

5dc8549544ec3e55aa0e2a89c2b278e8445.jpg

7.内省

如果是我们亲自设计了类型,那我们自然知道哪些类型是可用的。但如果类型不是我们设计的,我们也可以通过查询 __schema 字段来向 GraphQL 询问哪些类型是可用的。一个查询的根类型总是有 __schema 这个字段。现在来试试,查询一下有哪些可用的类型

7de30dad92d8d734ea586c7602b56c6e8aa.jpg

  • Query, Character, Book, Author, CountryEnum- 这些是我们在类型系统中定义的类型。
  • String, Boolean - 这些是内建的标量,由类型系统提供。
  • __Schema, __Type, __TypeKind, __Field, __InputValue, __EnumValue, __Directive - 这些有着两个下划线的类型是内省系统的一部分。

有时候也需要检验一个特定的类型

95c5032fde1da59d3e538191f6a42d42e94.jpg

a9af074023869cc97a76c2e0353ee903a5d.jpg

 

对于一个对象来说,知道它有哪些字段是很有用的,所以来问问内省系统 Book 有哪些字段

e808dec4781638fc83f4582a13b0ec2a86e.jpg

5eca8ef8bcd8fc0e9f64f53fd41b5b9706f.jpg

四、最佳实践

源码:https://github.com/windhan2100/graphql

 

转载于:https://my.oschina.net/hanchao/blog/3014116

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值