graphql Schema

Schema定义结构
schema { #定义查询
query: UserQuery
}
type UserQuery { #定义查询的类型
user(id:ID) : User #指定对象以及参数类型
}
type User { #定义对象
id:ID! # !表示该属性是非空项
name:String
age:Int
}

标量类型(Scalar Types)



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



Int :有符号 32 位整数。
Float :有符号双精度浮点值。
String :UTF‐8 字符序列。
Boolean : true 或者 false 。 
ID :ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键。
规范中定义的这5种类型,显然是不能满足需求的,所以在各种语言实现中,都有对类型进行了扩充,也就是GraphQL支持自定义类型,比如在graphql-java实现中增加了:Long、Byte等。



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



enum Episode { #定义枚举
NEWHOPE
EMPIRE
JEDI
}
type Human {
id: ID! # !表示该属性是非空项
name: String! # !表示该属性是非空项
appearsIn: [Episode]! #使用枚举类型
homePlanet: String
}



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



例如,你可以用一个 Character 接口用以表示《星球大战》三部曲中的任何角色:



interface Character { #定义接口
id: ID! # !表示该属性是非空项
name: String! # !表示该属性是非空项
friends: [Character]
appearsIn: [Episode]!
}
#实现接口
type Human implements Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
starships: [Starship]
totalCredits: Int
}
type Droid implements Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
primaryFunction: String
}



https://juejin.im/post/5b5545a0e51d4518e3119933
https://blog.csdn.net/onsenOnly/article/details/102739376
https://www.cnblogs.com/jiajin/p/8465746.html
https://www.apollographql.com/docs/tutorial/introduction/?_ga=2.255533710.726369286.1594889560-601870970.1594889560


Category golang