国产成人精品999视频&日本一区二区亚洲人妻精品&久久久精品国产99久久精&99热这里只有成人精品国产&精品国产剧情av一区二区&成人亚洲精品久久久久app&国产精品美女高潮抽搐A片

GraphQL 備忘清單

這份快速參考備忘單提供了 GraphQL 的簡要概述

入門

概述

  • RESTful API 的另一種方法
  • GraphQL 是一種 API 查詢語言
  • 使用清晰的共享術語輕松描述 GraphQL API 的形狀。
  • 客戶端發(fā)出查詢/突變以讀取和更新數(shù)據(jù)
  • GraphQL 語法可以表達復雜的實體關系
  • 不同語言 實現(xiàn) GraphQL 的庫

GraphQL

Schema

:--
schemaGraphQL 架構(gòu)定義
query讀取和遍歷數(shù)據(jù)
mutation修改數(shù)據(jù)或觸發(fā)動作
subscription發(fā)生事件時運行查詢

內(nèi)置標量類型

:--
Int有符號 32 位整數(shù)
Float有符號雙精度浮點值
StringUTF-8 字符序列
Boolean對或錯布爾值類型
ID唯一標識符

類型定義

:--
scalar標量類型
type對象類型
interface接口類型
union聯(lián)合類型
enum枚舉類型
input輸入對象類型

類型修飾符

:--
String可空字符串
String!非空字符串
[String]可空字符串列表
[String]!可空字符串的非空列表
[String!]!非空字符串的非空列表

輸入?yún)?shù)

基本輸入

type Query {
  users(limit: Int): [User]
}

輸入默認值

type Query {
  users(limit: Int = 10): [User]
}

具有多個參數(shù)的輸入

type Query {
  users(limit: Int, sort: String): [User]
}

具有多個參數(shù)和默認值的輸入

type Query {
  users(limit: Int = 10, sort: String): [User]
}
type Query {
  users(limit: Int, sort: String = "asc"): [User]
}
type Query {
  users(limit: Int = 10, sort: String = "asc"): [User]
}

輸入類型

input ListUsersInput {
  limit: Int
  since_id: ID
}
type Mutation {
  users(params: ListUsersInput): [User]!
}

自定義標量

scalar Url
type User {
  name: String
  homepage: Url
}

接口

interface Foo {
  is_foo: Boolean
}
interface Goo {
  is_goo: Boolean
}
type Bar implements Foo {
  is_foo: Boolean
  is_bar: Boolean
}
type Baz implements Foo, Goo {
  is_foo: Boolean
  is_goo: Boolean
  is_baz: Boolean
}

實現(xiàn)一個或多個接口的對象

聯(lián)合

type Foo {
  name: String
}
type Bar {
  is_bar: String
}
union SingleUnion = Foo
union MultipleUnion = Foo | Bar
type Root {
  single: SingleUnion
  multiple: MultipleUnion
}

一個或多個對象的聯(lián)合

枚舉

enum USER_STATE {
  NOT_FOUND
  ACTIVE
  INACTIVE
  SUSPENDED
}
type Root {
  stateForUser(userID: ID!): USER_STATE!
  users(state: USER_STATE, limit: Int = 10): [User]
}

查詢和變更(Mutations)

字段

{
  hero {
    name
  }
}

結(jié)果:

{
  "data": {
    "hero": {
      "name": "R2-D2"
    }
  }
}

查詢可以有注釋

{
  hero {
    name
    # 查詢可以有注釋!
    friends {
      name
    }
  }
}

結(jié)果:

{
  "data": {
    "hero": {
      "name": "R2-D2",
      "friends": [
        { "name": "Luke Skywalker" },
        { "name": "Han Solo" }
      ]
    }
  }
}

參數(shù) Arguments

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

結(jié)果:

{
  "data": {
    "human": {
      "name": "Luke Skywalker",
      "height": 1.72
    }
  }
}

不同類型的參數(shù)

{
  human(id: "1000") {
    name
    height(unit: FOOT)
  }
}

結(jié)果:

{
  "data": {
    "human": {
      "name": "Luke Skywalker",
      "height": 5.6430448
    }
  }
}

別名(Aliases)

{
  empireHero: hero(episode: EMPIRE) {
    name
  }
  jediHero: hero(episode: JEDI) {
    name
  }
}

結(jié)果:

{
  "data": {
    "empireHero": {
      "name": "Luke Skywalker"
    },
    "jediHero": {
      "name": "R2-D2"
    }
  }
}

片段(Fragments)

{
  leftComparison: hero(episode: EMPIRE) {
    ...comparisonFields
  }
  rightComparison: hero(episode: JEDI) {
    ...comparisonFields
  }
}
?
fragment comparisonFields on Character {
  name
  appearsIn
  friends {
    name
  }
}

結(jié)果:

{
  "data": {
    "leftComparison": {
      "name": "Luke Skywalker",
      "appearsIn": [
        "NEWHOPE",
        "EMPIRE",
        "JEDI"
      ],
      "friends": [
        { "name": "Han Solo" },
        { "name": "Leia Organa" },
        { "name": "C-3PO" },
        { "name": "R2-D2" }
      ]
    },
    "rightComparison": {
      "name": "R2-D2",
      "appearsIn": [
        "NEWHOPE",
        "EMPIRE",
        "JEDI"
      ],
      "friends": [
        { "name": "Luke Skywalker" },
        { "name": "Han Solo" },
        { "name": "Leia Organa" }
      ]
    }
  }
}

在片段內(nèi)使用變量

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
      }
    }
  }
}

結(jié)果:

{
  "data": {
    "leftComparison": {
      "name": "Luke Skywalker",
      "friendsConnection": {
        "totalCount": 4,
        "edges": [
          {
            "node": {
              "name": "Han Solo"
            }
          },
          {
            "node": {
              "name": "Leia Organa"
            }
          }
        ]
      }
    },
    "rightComparison": {
      "name": "R2-D2",
      "friendsConnection": {
        "totalCount": 3,
        "edges": [
          {
            "node": {
              "name": "Luke Skywalker"
            }
          },
          {
            "node": {
              "name": "Han Solo"
            }
          }
        ]
      }
    }
  }
}

操作名稱(Operation name)

query HeroNameAndFriends {
  hero {
    name
    friends {
      name
    }
  }
}

結(jié)果:

{
  "data": {
    "hero": {
      "name": "R2-D2",
      "friends": [
        { "name": "Luke Skywalker" },
        { "name": "Han Solo" },
        { "name": "Leia Organa" }
      ]
    }
  }
}

變量(Variables)

# { "graphiql": true, "variables": { "episode": JEDI } }
query HeroNameAndFriends($episode: Episode) {
  hero(episode: $episode) {
    name
    friends {
      name
    }
  }
}

變量前綴必須為 $,后跟其類型

默認變量(Default variables)

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

指令(Directives)

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

{ "episode": "JEDI", "withFriends": false }

結(jié)果:

{
  "data": { "hero": { "name": "R2-D2" } }
}
  • @include(if: Boolean) 僅在參數(shù)為 true 時,包含此字段
  • @skip(if: Boolean) 如果參數(shù)為 true,跳過此字段

變更(Mutations)

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

{
  "ep": "JEDI",
  "review": {
    "stars": 5,
    "commentary": "This is a great movie!"
  }
}

結(jié)果:

{
  "data": {
    "createReview": {
      "stars": 5,
      "commentary": "This is a great movie!"
    }
  }
}

內(nèi)聯(lián)片段(Inline Fragments)

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

{ "ep": "JEDI" }

結(jié)果:

{
  "data": {
    "hero": {
      "name": "R2-D2",
      "primaryFunction": "Astromech"
    }
  }
}

元字段(Meta fields)

{
  search(text: "an") {
    __typename
    ... on Human {
      name
    }
    ... on Droid {
      name
    }
    ... on Starship {
      name
    }
  }
}

結(jié)果:

{
  "data": {
    "search": [
      {
        "__typename": "Human",
        "name": "Han Solo"
      },
      {
        "__typename": "Human",
        "name": "Leia Organa"
      },
      {
        "__typename": "Starship",
        "name": "TIE Advanced x1"
      }
    ]
  }
}