一、Query
有必要记住的是,除了作为 schema 的入口,Query
和 Mutation
类型与其它 GraphQL 对象类型别无二致,它们的字段也是一样的工作方式。
在简单学习-1里面,我们搭建了一个springboot项目,并且引入了graphiql的jar,这样,我们就可以使用GraphiQL进行开发和测试了。
开发和测试的代码,我们已经在项目中写入了。下面看下如何使用GraphiQL进行测试!
http://localhost/graphiql
最右面相当于接口文档,最左边可以查看历史!中间是操作的过程,以及结果!
注意事项:查询时,直接按照上面的写法就可以了!
二、Mutation
注意事项:改变操作时,必须要写mutation的声明!
注意事项:对于传入对象的情况,我们可以使用变量进行赋值! 【BookInput也是一种输入类型!!】
三、其他的操作
1.别名
2.片段
片段使你能够组织一组字段,然后在需要它们的的地方引入
3.操作名称
操作类型可以是 query、mutation 或 subscription,描述你打算做什么类型的操作。操作类型是必需的,除非你使用查询简写语法,在这种情况下,你无法为操作提供名称或变量定义。
操作名称是你的操作的有意义和明确的名称。它仅在有多个操作的文档中是必需的,但我们鼓励使用它,因为它对于调试和服务器端日志记录非常有用。
下面的示例包含了作为操作类型的关键字 query
以及操作名称 getAuhtor:
4.变量
所有声明的变量都必须是标量、枚举型或者输入对象类型。所以如果想要传递一个复杂对象到一个字段上,你必须知道服务器上其匹配的类型。可以从Schema页面了解更多关于输入对象类型的信息。
5.指令
一个指令可以附着在字段或者片段包含的字段上,然后以任何服务端期待的方式来改变查询的执行。GraphQL 的核心规范包含两个指令,其必须被任何规范兼容的 GraphQL 服务器实现所支持:
@include(if: Boolean)
仅在参数为true
时,包含此字段。@skip(if: Boolean)
如果参数为true
,跳过此字段。
指令在你不得不通过字符串操作来增减查询的字段时解救你。服务端实现也可以定义新的指令来添加新的特性。
6枚举类型
枚举类型是一种特殊的标量,它限制在一个特殊的可选值集合内。这让你能够:
- 验证这个类型的任何参数是可选值的的某一个
- 与类型系统沟通,一个字段总是一个有限值集合的其中一个值。
建立一个枚举类:
public enum CountryEnum {
USA,CHINA;
}
在schema.graphqls中加入:
enum CountryEnum {
CHINA
USA
}
在root.graphqls中的type Query加入:
#### 测试枚举 ####
testEnum(country: CountryEnum!): String!
7.内省
如果是我们亲自设计了类型,那我们自然知道哪些类型是可用的。但如果类型不是我们设计的,我们也可以通过查询 __schema
字段来向 GraphQL 询问哪些类型是可用的。一个查询的根类型总是有 __schema
这个字段。现在来试试,查询一下有哪些可用的类型
- Query, Character, Book, Author, CountryEnum- 这些是我们在类型系统中定义的类型。
- String, Boolean - 这些是内建的标量,由类型系统提供。
- __Schema, __Type, __TypeKind, __Field, __InputValue, __EnumValue, __Directive - 这些有着两个下划线的类型是内省系统的一部分。
有时候也需要检验一个特定的类型
对于一个对象来说,知道它有哪些字段是很有用的,所以来问问内省系统 Book 有哪些字段
四、最佳实践
源码:https://github.com/windhan2100/graphql