真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

GraphQL類(lèi)型系統(tǒng)有哪幾種

今天小編給大家分享一下GraphQL類(lèi)型系統(tǒng)有哪幾種的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

興山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!

GraphQL 最初于 2012 年在 Facebook 開(kāi)發(fā),作為針對(duì)動(dòng)力不足的移動(dòng)設(shè)備的更好的數(shù)據(jù)獲取解決方案,GraphQL 于 2015 年開(kāi)源。作為一種為靈活性而設(shè)計(jì)的 API 技術(shù),GraphQL 是 API 的開(kāi)發(fā)人員和消費(fèi)者以及他們背后的組織的強(qiáng)大推動(dòng)者。GraphQL 實(shí)現(xiàn)的所有細(xì)節(jié)和功能都在 GraphQL Schema 中列出。為了編寫(xiě)一個(gè)有效的 GraphQL schema,必須理解好 GraphQL 類(lèi)型系統(tǒng)。

GraphQL五種內(nèi)置標(biāo)量(scalar)類(lèi)型、枚舉(enums)、列表(list)和非空包裝(non-null)類(lèi)型、對(duì)象(object)類(lèi)型以及與它們一起工作的抽象接口和聯(lián)合類(lèi)型(union)。

標(biāo)量類(lèi)型

GraphQL 模式中的所有數(shù)據(jù)最終都解析為各種標(biāo)量類(lèi)型,代表原始值。GraphQL 響應(yīng)可以看作一棵樹(shù),標(biāo)量類(lèi)型是樹(shù)末端的葉子。嵌套響應(yīng)中可以有多個(gè)級(jí)別,但最后一個(gè)級(jí)別將始終解析為標(biāo)量(或枚舉)類(lèi)型。 GraphQL 帶有五種內(nèi)置標(biāo)量類(lèi)型:IntFloat、String、BooleanID。

Int

Int 是帶符號(hào)的 32 位非小數(shù)值,它是不包括小數(shù)的帶符號(hào)(正或負(fù))整數(shù)。帶符號(hào)的 32 位整數(shù)的最大值為 2,147,483,647。這是用于數(shù)值數(shù)據(jù)的兩個(gè)內(nèi)置標(biāo)量之一。

Float

Float 是帶符號(hào)的雙精度小數(shù)值。它是一個(gè)帶小數(shù)點(diǎn)的有符號(hào)(正或負(fù))數(shù),例如 1.2,這是用于數(shù)值數(shù)據(jù)的另一個(gè)內(nèi)置標(biāo)量。

String

StringUTF-8 字符序列。 String 類(lèi)型用于任何文本數(shù)據(jù),這也可以包括非常大的數(shù)字等數(shù)據(jù)。大多數(shù)自定義標(biāo)量都是字符串?dāng)?shù)據(jù)類(lèi)型。

Boolean

Boolean 包含 truefalse。

ID

ID 是唯一標(biāo)識(shí)符,始終序列化為字符串,即使 ID 是數(shù)字也是如此。ID 類(lèi)型通??梢杂猛ㄓ梦ㄒ粯?biāo)識(shí)符 (UUID) 表示。

自定義標(biāo)量

除了上述這些內(nèi)置標(biāo)量之外,還可以使用 scalar 關(guān)鍵字來(lái)定義自定義標(biāo)量??梢允褂米远x標(biāo)量來(lái)創(chuàng)建具有額外服務(wù)器級(jí)別驗(yàn)證的類(lèi)型,例如 DateTimeUrl。下面是一個(gè)定義新 Date 類(lèi)型的示例:

scalar Date

服務(wù)器將知道如何使用 GraphQLScalarType 處理與這種新類(lèi)型的交互。

枚舉(Enum)類(lèi)型

Enum 類(lèi)型,也稱(chēng)為 Enumerator 類(lèi)型,用于描述了一組可能的值。

例如可以為游戲角色的 JobSpecies 創(chuàng)建一個(gè)枚舉,其中包含系統(tǒng)將接受的所有值。

"角色的工作等級(jí)"
enum Job {
  FIGHTER
  WIZARD
}

"性格的種類(lèi)或血統(tǒng)"
enum Species {
  HUMAN
  ELF
  DWARF
}

通過(guò)定義枚舉類(lèi)型可以保證角色的 Job 只能是 FIGHTERWIZARD,并且永遠(yuǎn)不會(huì)意外地成為其他一些隨機(jī)字符串,如果使用 String 類(lèi)型而不是 Enum,那么就有可能是別的隨機(jī)字符串。

枚舉也可以用作參數(shù)中的可接受值。例如,可以制作一個(gè) Hand 枚舉來(lái)表示武器是單手(如短劍)還是雙手(如重斧),并使用它來(lái)確定是否可以裝備一個(gè)或兩個(gè):

enum Hand {  SINGLE
  DOUBLE}"戰(zhàn)士使用的一種武器"type Weapon {
  name: String!
  attack: Int
  range: Int
  hand: Hand
}

type Query {
  weapons(hand: Hand = SINGLE): [Weapon]
}

Hand 枚舉已聲明為 SINGLEDOUBLE 作為值,weapons 字段上的參數(shù)具有默認(rèn)值 SINGLE,這意味著如果未傳遞任何參數(shù),它將回默認(rèn)為 SINGLE。

非空類(lèi)型

可能會(huì)注意到內(nèi)置標(biāo)量列表中缺少 nullundefined(一種被許多語(yǔ)言視為原始類(lèi)型的常見(jiàn)類(lèi)型)。 Null 在 GraphQL 中確實(shí)存在,表示缺少一個(gè)值。默認(rèn)情況下,GraphQL 中的所有類(lèi)型都可以為 null,因此 null 是對(duì)任何類(lèi)型的有效響應(yīng)。為了使值成為必需值,必須將其轉(zhuǎn)換為帶有尾隨感嘆號(hào)的 GraphQL 非空類(lèi)型。 Non-Null 被定義為類(lèi)型修飾符,這些類(lèi)型用于修飾它所引用的類(lèi)型。例如,String 是一個(gè)可選的(或可為空的)字符串,而 String! 是必需的(或非空的)字符串。

列表類(lèi)型

GraphQL 中的 List 類(lèi)型是另一種類(lèi)型修飾符。任何用方括號(hào) ([]) 括起來(lái)的類(lèi)型都會(huì)成為 List 類(lèi)型,這是一個(gè)定義列表中每個(gè)項(xiàng)目類(lèi)型的集合,像 JavaScript 中的數(shù)組。

例如,定義為 [Int] 的類(lèi)型意味著這個(gè)集合所有元素的類(lèi)型為 Int 類(lèi)型,[String] 將是 String 類(lèi)型的集合。 Non-NullList 可以一起使用,使一個(gè)類(lèi)型既需要又定義為 List,例如 [String]!

對(duì)象類(lèi)型

如果 GraphQL 標(biāo)量類(lèi)型描述分層 GraphQL 響應(yīng)末尾的“葉子”,那么對(duì)象類(lèi)型描述中間的 分支,并且 GraphQL 模式中的幾乎所有內(nèi)容都是一種對(duì)象類(lèi)型。

對(duì)象由命名字段(鍵)列表和每個(gè)字段將解析為的值類(lèi)型組成。對(duì)象是用 type 關(guān)鍵字定義的。至少要定義一個(gè)或多個(gè)字段,字段不能以?xún)蓚€(gè)下劃線(__)開(kāi)頭,以免與GraphQL自省系統(tǒng)沖突。

例如創(chuàng)建一個(gè) Fighter 對(duì)象來(lái)表示游戲中的一種角色:

"具有直接戰(zhàn)斗能力和力量的英雄"
type Fighter {
  id: ID!
  name: String!
  level: Int
  active: Boolean!
}

在此示例中,聲明了 Fighter 對(duì)象類(lèi)型,定義了 4 個(gè)字段:

  • id:非空 ID 類(lèi)型。

  • name:非空字符串類(lèi)型。

  • levelInt 類(lèi)型。

  • active:非空布爾類(lèi)型。

在聲明上方,可以使用雙引號(hào)添加注釋?zhuān)绫纠?code>具有直接戰(zhàn)斗能力和力量的英雄,這將顯示為類(lèi)型的描述。

在此示例中,每個(gè)字段都解析為標(biāo)量類(lèi)型,但對(duì)象字段也可以解析為其他對(duì)象類(lèi)型。例如,可以創(chuàng)建一個(gè) Weapon 類(lèi)型,并且可以設(shè)置 GraphQL 模式,其中 Fighter 上的 weapon 字段將解析為一個(gè) Weapon 對(duì)象:

"戰(zhàn)士使用的一種武器"
type Weapon {
  name: String!
  attack: Int
  range: Int
}

"具有直接戰(zhàn)斗能力和力量的英雄"
type Fighter {
  id: ID!
  name: String!
  level: Int
  active: Boolean!
  weapon: Weapon
}

對(duì)象也可以嵌套到其他對(duì)象的字段中。

根操作類(lèi)型

有三種特殊對(duì)象作為 GraphQL schema 的入口點(diǎn):QueryMutationSubcription。這些被稱(chēng)為根操作類(lèi)型,并遵循與任何其他對(duì)象類(lèi)型相同的規(guī)則。

schema 關(guān)鍵字表示 GraphQL 模式的入口點(diǎn)。根 QueryMutationSubcription 類(lèi)型將位于根模式對(duì)象上:

schema {
  query: Query
  mutation: Mutation
  subscription: Subscription
}

Query 類(lèi)型在任何 GraphQL 模式上都是必需的,代表一個(gè)讀取請(qǐng)求,類(lèi)似于 REST API GET。以下是返回 Fighter 類(lèi)型列表的根查詢(xún)對(duì)象的示例:

type Query {
  fighters: [Fighter]
}

Mutations 代表寫(xiě)入請(qǐng)求,類(lèi)似于 REST API 中的 POSTPUTDELETE。在以下示例中,Mutation 有一個(gè)帶有命名參數(shù)(輸入)的 addFighter 字段:

type Mutation {
  addFighter(input: FighterInput): Fighter
}

最后,一個(gè) Subscription 對(duì)應(yīng)于一個(gè)事件流,它將與 Web 應(yīng)用程序中的 Websocket 結(jié)合使用。如下所示:

type Subscription {
  randomBattle(enemy: Enemy): BattleResult
}

請(qǐng)注意,schema 入口點(diǎn)通常在某些 GraphQL 實(shí)現(xiàn)中被抽象掉。

字段參數(shù)

GraphQL 對(duì)象的字段本質(zhì)上是返回值的函數(shù),并且它們可以像任何函數(shù)一樣接受參數(shù)。字段參數(shù)由參數(shù)名稱(chēng)后跟類(lèi)型定義,參數(shù)可以是任何非對(duì)象類(lèi)型。在此示例中,可以通過(guò) id 字段(解析為非空 ID 類(lèi)型)過(guò)濾 Fighter 對(duì)象:

type Query {
  fighter(id: ID!): Fighter
}

這個(gè)特定示例對(duì)于從數(shù)據(jù)存儲(chǔ)中獲取單個(gè)項(xiàng)目很有用,但參數(shù)也可用于過(guò)濾、分頁(yè)和其他更具體的查詢(xún)。

接口類(lèi)型

Object 類(lèi)型一樣,抽象接口類(lèi)型由一系列命名字段及其關(guān)聯(lián)的值類(lèi)型組成。接口看起來(lái)像并遵循與對(duì)象相同的所有規(guī)則,但用于定義對(duì)象實(shí)現(xiàn)的子集。

到目前為止,在 schema 中有一個(gè) Fighter 對(duì)象,但可能還想創(chuàng)建一個(gè)Wizard、一個(gè) Healer 和其他對(duì)象,它們將共享大部分相同的字段但還是存在一些差異。在這種情況下,可以使用接口來(lái)定義它們共有的字段,并創(chuàng)建作為接口實(shí)現(xiàn)的對(duì)象。

在下面的示例中,使用 interface 關(guān)鍵字創(chuàng)建 BaseCharacter 接口,其中包含每種類(lèi)型的字符將擁有的所有字段:

"A hero on a quest."interface BaseCharacter {
  id: ID!
  name: String!
  level: Int!
  species: Species
  job: Job
}

每個(gè)角色類(lèi)型都有字段 id、namelevel、speciesjob。

現(xiàn)在,假設(shè)有一個(gè)具有這些共享字段的 Fighter 類(lèi)型和一個(gè) Wizard 類(lèi)型,但是 Fighters 使用 WeaponWizards 使用 Spells??梢允褂?implements 關(guān)鍵字將每個(gè)描述為 BaseCharacter 實(shí)現(xiàn),這意味著它們必須具有創(chuàng)建的接口中的所有字段:

type Fighter implements BaseCharacter {
  id: ID!
  name: String!
  level: Int!
  species: Species
  job: Job!
  weapon: Weapon
}
type Wizard implements BaseCharacter {
  id: ID!
  name: String!
  level: Int!
  species: Species
  job: Job!
  spells: [Spell]
}

FighterWizard 都是 BaseCharacter 接口的有效實(shí)現(xiàn),因?yàn)樗鼈兙哂兴璧淖侄巫蛹?/p>

Union 類(lèi)型

可以與對(duì)象一起使用的另一種抽象類(lèi)型是 union 類(lèi)型。使用 union 關(guān)鍵字,可以定義一個(gè)類(lèi)型,其中包含所有有效響應(yīng)的對(duì)象列表。

使用上面創(chuàng)建的接口,可以創(chuàng)建一個(gè) Character union,將 character 定義為 WizardFighter

union Character = Wizard | Fighter

等號(hào) = 設(shè)置定義,管道符 | 用作 OR 語(yǔ)句。請(qǐng)注意,union 必須由對(duì)象或接口組成,標(biāo)量類(lèi)型在 union 上無(wú)效?,F(xiàn)在,如果查詢(xún) characters 列表,它可以使用 Character union 并返回所有 WizardFighter 類(lèi)型。

以上就是“GraphQL類(lèi)型系統(tǒng)有哪幾種”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章標(biāo)題:GraphQL類(lèi)型系統(tǒng)有哪幾種
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/pdsess.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部