
- GraphQL 教程
- GraphQL - 首頁
- GraphQL - 簡介
- GraphQL - 環境設定
- GraphQL - 架構
- GraphQL - 應用程式元件
- GraphQL - 示例
- GraphQL - 型別系統
- GraphQL - 模式
- GraphQL - 解析器
- GraphQL - 查詢
- GraphQL - 變異
- GraphQL - 驗證
- GraphQL - JQuery 整合
- GraphQL - React 整合
- GraphQL - Apollo 客戶端
- GraphQL - 客戶端認證
- GraphQL - 快取
- GraphQL 有用資源
- GraphQL - 快速指南
- GraphQL - 有用資源
- GraphQL - 討論
GraphQL - 型別系統
GraphQL 是一種強型別語言。型別系統定義了可以在 GraphQL 應用程式中使用的各種資料型別。型別系統有助於定義模式,模式是客戶端和伺服器之間的契約。常用的 GraphQL 資料型別如下:
序號 | 型別及描述 |
---|---|
1 | 標量 儲存單個值 |
2 | 物件 顯示可以獲取哪種物件 |
3 | 查詢 到其他特定型別的入口點型別 |
4 | 變異 資料操作的入口點 |
5 | 列舉 在需要使用者從預設選項列表中選擇時很有用 |
標量型別
標量型別是隻能儲存單個值的原始資料型別。GraphQL 提供的預設標量型別為:
Int - 帶符號的 32 位整數
Float - 帶符號的雙精度浮點數
String - UTF-8 字元序列
Boolean - 真或假
ID - 唯一識別符號,通常用作獲取物件的唯一識別符號或作為快取的鍵。
定義標量型別的語法如下:
field: data_type
下面給出的程式碼片段定義了一個名為 greeting 的欄位,該欄位返回 String 值。
greeting: String
物件型別
物件型別是模式中最常用的型別,表示一組欄位。物件型別中的每個欄位都對映到另一種型別,從而允許巢狀型別。換句話說,物件型別由多個標量型別或物件型別組成。
定義物件型別的語法如下:
type object_type_name { field1: data_type field2:data_type .... fieldn:data_type }
您可以考慮以下程式碼片段:
--Define an object type-- type Student { stud_id:ID firstname: String age: Int score:Float }
--Defining a GraphQL schema-- type Query { stud_details:[Student] }
上面給出的示例定義了一個物件資料型別 Student。根 Query 模式中的 stud_details 欄位將返回一個 Student 物件列表。
查詢型別
GraphQL 查詢用於獲取資料。它就像在基於 REST 的 API 中請求資源一樣。簡單來說,查詢型別是從客戶端應用程式傳送到 GraphQL 伺服器的請求。GraphQL 使用模式定義語言 (SDL) 來定義查詢。查詢型別是 GraphQL 中眾多根級型別之一。
定義查詢的語法如下:
type Query { field1: data_type field2:data_type field2(param1:data_type,param2:data_type,...paramN:data_type):data_type }
定義查詢的示例:
type Query { greeting: String }
變異型別
變異是傳送到伺服器以建立、更新或刪除資料的操作。這類似於呼叫基於 REST 的 API 的 PUT、POST、PATCH 和 DELETE 動詞。
變異是 GraphQL 中的根級資料型別之一。查詢型別定義資料獲取操作的入口點,而變異型別指定資料操作的入口點。
定義變異型別的語法如下:
type Mutation { field1: data_type field2(param1:data_type,param2:data_type,...paramN:data_type):data_type }
例如,我們可以定義一個變異型別來新增新的學生,如下所示:
type Mutation { addStudent(firstName: String, lastName: String): Student }
列舉型別
列舉類似於標量型別。列舉在欄位的值必須來自預設選項列表的情況下很有用。
定義列舉型別的語法為:
type enum_name{ value1 value2 }
以下程式碼片段說明了如何定義列舉型別:
type Days_of_Week{ SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY }
列表型別
列表可用於表示特定型別的陣列值。列表使用型別修飾符 [] 定義,該修飾符包裝物件型別、標量和列舉。
可以使用以下語法定義列表型別:
field:[data_type]
以下示例定義了一個列表型別 todos:
type Query { todos: [String] }
非空型別
預設情況下,每個核心標量型別都可以設定為 null。換句話說,這些型別可以返回指定型別的值,也可以沒有值。要覆蓋此預設值並指定必須定義欄位,可以將感嘆號 (!) 附加到型別。這確保了查詢返回的結果中存在值。
可以使用以下語法定義非空欄位:
field:data_type!
在下面的示例中,stud_id 被宣告為必填欄位。
type Student { stud_id:ID! firstName:String lastName:String fullName:String college:College }