iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0
Vue.js

Vue & GraphQL 探險之旅:30天,從新手村到魔王之巔系列 第 11

[Day11] 資料召喚術:深入淺出 GraphQL Operation 核心概念

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20231014/20141111IIDscMgu0v.png

昨天,我們深入探討了 GraphQL Document。
今天,我們將繼續探索另一核心概念:GraphQL Operation

想像一下,在奇幻世界中,冒險者高聲吟唱神秘咒語,強大的魔法隨即展現。
https://ithelp.ithome.com.tw/upload/images/20231014/201411119h5aAo9xrf.png

如果「Document」是 GraphQL 世界中的魔法語法規則,那「Operation」就等同於那句具體而強大的魔法咒語。

在 GraphQL 裡,執行查詢 (query)、變更 (mutation) 或訂閱 (subscription),就像是施展魔法,根據「Document」的指引,來召喚或修改資料,換句話說,「Operation」是施法的手段,而「Document」就是我們的魔法指南。


操作與文檔的關係

在 GraphQL 中,一個 GraphQL Document 可以包含一個或多個 Operation,例如:

// 查詢一個用戶的資訊
query {
  user(id: 1) {
    id
    name
    email
  }
}

// 創建一個新的待辦事項
mutation {
  createTodo(input: { title: "Buy groceries" }) {
    id
    title
    completed
  }
}

// 查詢所有待辦事項的標題
query {
  todos {
    id
    title
  }
}

這樣的結構允許我們在一個請求文檔中組合不同類型的操作,從而減少了請求的數量,提高了效率。

當伺服器接收到這個文檔時,它會分別解析和執行每個操作,然後返回相應的結果。這種方式可以更好地滿足客戶端的需求,並減少不必要的請求。

但隨之而來的,則是文檔解析的效能問題,伺服器在解析執行過於複雜、設計不良的文檔時,往往會導致效能低落的問題。

總結來說,GraphQL 文檔允許多個操作的特性為我們提供了靈活性和效率,但同時也需要謹慎設計以確保順利執行。


GraphQL Operation

GraphQL Operation 是 GraphQL 中用於執行查詢、變更或訂閱的具體操作手段。

三大核心操作

三大核心操作指的是查詢 (query)變更 (mutation)訂閱 (subscription)

查詢 (Query)

Query is a read-only fetch.

查詢在 GraphQL 中是一種請求方式,它是唯讀的,只負責取得資料,而不會進行任何修改或刪除。例如:

// 匿名查詢
query {
  todos {
    title
  }
}
// 具名查詢
query getTodos {
  todos {
    title
  }
}

在後續的章節,我們將深入探討在 Vue 中有效使用查詢的技巧和實例。

變更 (Mutation)

Mutation is a write followed by fetch.

變更在 GraphQL 中是一種寫入後取得資料的操作,用於改變資料。與查詢不同,它們不僅僅是用來讀取資料,而是用來修改、新增或刪除資料。例如:

// 新增一個待辦事項,如果成功,返回新增的待辦事項的 id 和創建日期。
mutation {
  insertTodos(objects: [{ title: "Learn GraphQL" }]) {
    returning {
      id
      created_at
    }
  }
}

我們可以由上述的例子觀察到:

  1. 變更使用關鍵字 mutation 而不是 query。
  2. Mutation 需要輸入。在這個例子是 title,它是新待辦事項的標題。
  3. Mutation 可以返回資料。

在後續的章節,我們將深入研究如何使用 Mutation 來改變資料,並將其與查詢結合,以構建功能豐富的應用程式。

訂閱 (Subscription)

Subscription is a long‐lived request that fetches data in response to source events.

在 GraphQL 中,不僅可以查詢和修改資料,還可以通過訂閱(Subscription)來感知資料的即時變化。
訂閱的概念就像你訂閱了一個直播活動的通知。每當有新的直播開始時,你會立即得到通知。例如:

subscription {
  newLives {
    id
    title
    user {
      name
    }
  }
}

Subscription 與 WebSocket

訂閱是一個長期的連結,它允許客戶端保持與伺服器的連接,以便即時接收更新。這種長期連接是通過 WebSocket 等協議實現的,它們與傳統的HTTP請求不同,後者是短期的並且需要不斷重新建立。


RESTFul 與 GraphQL 操作對照表

這個對照表可以協助熟悉 RESTful 的開發者,將觀念轉換成 GraphQL 操作。

Requirement REST GraphQL
Fetching data objects GET query
Inserting data POST mutation
Updating / deleting data PUT / PATCH / DELETE mutation
Watching / subscribing to data - subscription

Recap

在本篇文章中,我們深入瞭解了 GraphQL 操作的三大核心類型:查詢、變更和訂閱。
這些操作是GraphQL中用於取得、修改和監聽資料的主要方法,這些知識將為我們在後續章節中更深入地探討GraphQL提供堅實的基礎。

明天,我們將進入本系列文章的下一個階段 - 「動手做、做中學」
我們將繼續開發之前的部落格專案,首先,我們將從查詢操作開始!


上一篇
[Day10] GraphQL 的語言學:深入查詢語法,描述資料的藝術與結構
下一篇
[Day12] 實戰演練:從 Vue 開始的冒險,讓 GraphQL 查詢照亮部落格開發的征途
系列文
Vue & GraphQL 探險之旅:30天,從新手村到魔王之巔31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言