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)对象类型和标量(单一)类型

标量类型:为StringIntFloatBoolean,和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
    }
  }
}

  

 
posted @ 2018-08-28 13:43  tutu_python  阅读(140)  评论(0)    收藏  举报