GraphQL基础教程

1.字段的使用

query Hero{
  hero {
    name
  }
}

分析:name是hero字段的字段,由于GraphQL的查询与其结果是一致的,所以可以通过改变字段来改变想查询的结果

2.参数的使用

query Human{
  human(id: "1000") {
    name
    height
  }
}

分析:通过传入参数进行条件查询

3.别名的使用

query Hero{
  empireHero: hero(id: "1") {
    name
  }
  jediHero: hero(id: "2") {
    name
  }
}

分析:两个 hero 字段将会存在冲突,但是因为我们可以将其另取一个别名,我们也就可以在一次请求中得到两个结果

4.Fragments片段的使用

query Hero{
  leftComparison: hero(id: "1") {
    ...comparisonFields
  }
  rightComparison: hero(id: "2") {
    ...comparisonFields
  }
}
fragment comparisonFields on Character {
  id
  name
}

分析:将经常使用的字段组合在一起,在需要它们的的地方引入

5.变量的使用

query HeroNameAndFriends($episode: Episode = "JEDI") {
  hero(episode: $episode) {
    name
    friends {
      name
    }
  }
}

分析:变量前缀必须为 $,后跟其类型,本例中类型为 Episode(自定义的枚举类型),Episode 后面并没有!,因此其是可选的。但是如果你传递变量的字段要求非空参数,那就要加上!,本例中给变量episode赋了一个默认值"JEDI"

6.指令的使用

query Hero($episode: Episode, $withFriends: Boolean!) {
  hero(episode: $episode) {
    id
    name @include(if: $withFriends)
  }
}

分析:一个指令可以附着在字段或者片段包含的字段上,然后以任何服务端期待的方式来改变查询的执行,GraphQL 的核心规范包含两个指令:(1)@include(if: Boolean) 仅在参数为 true 时,包含此字段;(2)@skip(if: Boolean) 如果参数为 true,跳过此字段

7.变更语句的使用

mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
  createReview(episode: $ep, review: $review) {
    stars
    commentary
  }
}

分析:review 变量并非标量。它是一个输入对象类型,一种特殊的对象类型,可以作为参数传递;查询和变更之间名称之外的一个重要区别是:查询字段时,是并行执行,而变更字段时,是线性执行,一个接着一个

8.Schema的类型与字段

type Character {
  name: String!
  appearsIn: [Episode]!
}

分析:(1)Character 是一个 GraphQL 对象类型,表示其是一个拥有一些字段的类型。你的 schema 中的大多数类型都会是对象类型;(2)nameappearsInCharacter 类型上的字段。这意味着在一个操作 Character 类型的 GraphQL 查询中的任何部分,都只能出现 nameappearsIn 字段(3)[Episode]! 表示一个 Episode数组。因为它也是非空的,所以当你查询 appearsIn 字段的时候,你也总能得到一个数组(零个或者多个元素)

9.Schema的参数

query {
  hero {
    name
  }
  droid(id: "2000") {
    name
  }
}
type Query {
  hero: Character
  droid(id: ID!): Droid
}

分析:GraphQL 对象类型上的每一个字段都可能有零个或者多个参数,在本例中,id就是参数

10.标量类型

Int:有符号 32 位整数
Float:有符号双精度浮点值
String:UTF‐8 字符序列
Boolean:true 或者 false
ID:ID 标量类型表示一个唯一标识符,通常用以重新获取对象或者作为缓存中的键

11.Schema的枚举类型

enum Episode {
  NEWHOPE
  EMPIRE
  JEDI
}

12.接口的使用

interface Character {
  id: ID!
  name: String!
}
type Human implements Character {
  id: ID!
  name: String!
  totalCredits: Int
}

分析:任何实现Character 的类型都要具有这些字段,并有对应参数和返回类型

13.内联片段的使用

query HeroForEpisode($ep: Episode!) {
  hero(episode: $ep) {
    name
    ... on Droid {
      primaryFunction
    }
  }
}

分析:用于查询一个只存在于特定对象类型上的字段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值