iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0

GraphQL 就如同程式語言一樣有型態跟物件等概念,在這次的內容當中將介紹 GraphQL 的型別系統,首先看到以下整個 GraphQL 型別系統的基本元素示意圖。

https://ithelp.ithome.com.tw/upload/images/20230917/20161957vOo5q11R1Z.png

我們由上而下開始說明每個元素所代表的意義:

  • Schema:用來描述整個 GraphQL 的資料格式的結構與資料格式之間的關係組成,即物件與欄位的集合總覽,Schema 會包含下面所有元素的資訊,此外有許多的工具可以透過解析 Schema 來實作程式碼產生器(Code Generator)。
  • Directive:用於在 Schema 上的資料格式的結構的特殊標記,以@加上名稱,程式碼產生器可以基於這種標記做額外的處理。
  • Query:定義所有查詢的操作,包含物件的型態(Object Type)與該物件的查詢引數(Argument),Query 在 GraphQL 中是特殊的型別,它代表所有 GraphQL 的查詢資料進入點(Entry Point)。
  • Mutation:定義所有新增、修改與刪除等變更物件的操作,包含物件的型態(Object Type)與該物件的查詢引數(Argument)或輸入物件的型態(Input Type),Mutation 在 GraphQL 中也是特殊的型別,它代表所有 GraphQL 的變更資料進入點(Entry Point)。
  • Object Type:定義物件的資料結構,由許多的欄位(Fields)組成,可以看作是物件導向程式語言的類別(Class),或是 JSON 格式的物件(Object)的型態定義。
  • Input Type:用來定義複雜的輸入引數(Arguments),透過 Input Type,可以包裝複雜資料結構的資料,來傳遞給 Mutation 進行變更資料的操作。
  • Field:物件的欄位,其型態包含以下型態或是物件型態,可以看作是物件導向程式語言的類別(Class)中的屬性(Attribute)或函式(Function),或是 JSON 格式的 Key,Field 中也可能會定義引數(Arguments)來篩選查詢到的資料。
  • Argument:查詢引數,引數的型態包含以下型態或是輸入物件型態(Input Type)。
  • Scalar Type:純量型態,例如:32位元整數(Int)、雙精度浮點數(Float)、布林(Boolean)、UTF‐8字串(String)和唯一值字串(ID)等,也可以自行定義與實作純量型態,像是:日期(Date)、貨幣數值(Decimal)之類的。
  • Enumeration Type:列舉型態,用來表示有限制範圍內可以選擇的值,例如:任務狀態(未處理、處理中、已完成)、使用者角色(訪客、一般用戶、員工、管理者、系統管理者)。
  • List:列表型態,用來包裝複數資料型態的集合,以 [] 包裹其他型態表示,像是 users: [User]
  • Non-Null:非空值型態,透過在其他型態上標記! 驚嘆號來表示非空值型態或是當成必填欄位,像是 user: User!
  • Interface:一種抽象型別,用於定義物件型別(Object Type)必須包含的欄位(Fields),與物件導向程式語言的介面(Interface)型別類似。
  • Union Type:也是一種抽象型別,用於表示欄位(Field)的值包含複數種型態,像是 union SearchResult = Human | Droid | Starship

參考資料

備註:型態型別在這邊是相同意思,都是type


上一篇
Day 2:安裝 Strawberry 環境
下一篇
Day 4:使用 Strawberry 學習 GraphQL 型別 – 1
系列文
Django 與 Strawberry GraphQL:探索現代 API 開發之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言