GraphQL-Cheatsheet2020-04-29 15:13GraphQL

Basic

Comments

反正这边就是放一个井号就可以

# A type that describes the user
type User {
     # The user's username, should be typed in the login field.
     username: String!
     # The user's password.
     password: String!
}

Schemas & Types

Union Types

说明对应的类型可以是以下的 任何一种

union SearchResult = Human | Droid | Starship

对于 Union Types 进行 Query 的时候需要使用 Inline Fragments:

query HeroForEpisode($ep: Episode!) {       # 这个地方是根据传进来的 Episode 来决定返回什么类型, 类型的 `Type` 就是 `SearchResult`
  hero(episode: $ep) {
    name
    __typename                              # 另外这个 attr 是可选的, 会根据返回的 Type 来显示
                                            # 如果返回的一个 Human,那么这个值就是 "Human"
    ... on Droid {                          # 这个地方左边是真的要写三个点... 而不是省略了某部分
      primaryFunction
    }
    ... on Human {
      height
    }
  }
}

Fragments

很好理解这个就是一个碎片的概念, 将一些东西分片之后随后,随后重新组合将会变得更简单

存在的一些限制这个碎片必须要是已经存在的 Type 的部分 fields

{
  leftComparison: hero(episode: EMPIRE) {
    ...comparisonFields
  }
  rightComparison: hero(episode: JEDI) {
    ...comparisonFields
  }
}

fragment comparisonFields on Character {
  name
  appearsIn
  friends {
    name
  }
}

还可以在 fragment 里面提供对应一些参数

query HeroComparison($first: Int = 3) {
  leftComparison: hero(episode: EMPIRE) {
    ...comparisonFields
  }
  rightComparison: hero(episode: JEDI) {
    ...comparisonFields
  }
}

fragment comparisonFields on Character {
  name
  friendsConnection(first: $first) { # 上面传进来的参数放到了这里
    totalCount
    edges {
      node {
        name
      }
    }
  }
}

Troubleshooting

Syntax Error: Expected Name, found )

这个东西其实就是里面某个地方的 query 写错了, 很可能是 schem 里面格式错误

比如下方不需要写括号的

type Query {
    getContact():  Contact
}

Resource

  • GraphQL Faker
    • 这看起来是一个快速生成测试数据并且调试 GraphQL 的一个工具, 里面可以使用特定关键字生成一段测试数据
Powered by Remix
|
Designed by szhshp
|
Copyright © szhshp 2022