fullstack GraphQL学习笔记(6)更多概念
1、fragment
增加可重用性。
假设我们有以下类型:
type User {
name: String!
age: Int!
email: String!
street: String!
zipcode: String!
city: String!
}
我们这里将与User相关的所有地址信息放在一起
fragment addressDetails on User {
name
street
zipcode
city
}
现在,在编写查询以访问用户的地址信息时,我们可以使用以下语法来引用片段并保存工作以实际拼出四个字段:
{
allUsers {
... addressDetails
}
}
2、带参数的字段
type Query {
allUsers: [User!]!
}
type User {
name: String!
age: Int!
}
现在我们可以给allUser增加参数,并附带默认值。
type Query {
allUsers(olderThan: Int = -1): [User!]!
}
现在查询中可以使用olderThan 来传递参数了
{
allUsers(olderThan: 30) {
name
age
}
}
3、使用别名命名结果
如果相同的字段,但是不同的参数查询,会导致字段间的冲突,这时我们可以通过增加别名的方式,如下:
{
first: User(id: "1") {
name
}
second: User(id: "2") {
name
}
}
4、高级的SDL
(1)对象类型和标量(单一)类型
标量类型:为String,Int,Float,Boolean,和ID
复合类型:具有表示标量类型属性的字段,并且是可组合的
枚举类型
enum Weekday {
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
}
(2)Interface
interface Node {
id: ID!
}
type User implements Node {
id: ID!
name: String!
age: Int!
}
(3)Union
type Adult {
name: String!
work: String!
}
type Child {
name: String!
school: String!
}
Union Person = Adult | Child
对于联合类型和借口类型,我们可以使用fragement来查询
{
allPersons {
name # works for `Adult` and `Child`
... on Child {
school
}
... on Adult {
work
}
}
}
浙公网安备 33010602011771号