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