這取決於你的使用案例,但一般來說,GraphQL 有幾個關鍵特色脫穎而出。例如,GraphQL 能讓你
我們的首頁 概述了更多使用 GraphQL 的理由。
你可以在不改寫整個應用程式的狀況下,試用 GraphQL。例如,從一個封裝現有 REST 呼叫的 HTTP 要求開始。你的 GraphQL 架構 和 商業領域模型 可以逐漸擴充。我們建議一開始先專注於一個使用案例,只建構該案例所需的架構部分。
不,不一定。兩者都處理 API,並且可以從業務角度提供類似的目的。GraphQL 通常被視為 REST 的替代方案,但並非明確的取代方案。
GraphQL 和 REST 實際上可以在您的堆疊中並存。例如,您可以將 REST API 抽象在GraphQL 伺服器之後。這可以使用根解析器將 REST 端點遮罩成 GraphQL 端點來完成。
對於 GraphQL 與 REST 的比較,請查看如何使用 GraphQL,以取得意見化的觀點。
不,但這是常見的誤解。
GraphQL 是通常用於遠端客戶端伺服器通訊的規範。與 SQL 不同,GraphQL 與用於擷取資料和儲存變更的資料來源無關。存取和處理資料是使用稱為解析器的任意函數來執行。GraphQL 會協調和彙總這些解析器函數的資料,然後將結果傳回給客戶端。通常,這些解析器函數應委派給業務邏輯層,負責與各種基礎資料來源進行通訊。這些資料來源可以是遠端 API、資料庫、本機快取,以及您的程式語言幾乎可以存取的任何其他內容。
如需有關如何讓 GraphQL 與您的資料庫互動的更多資訊,請查看我們的解析器文件。
有許多資源可協助您學習 GraphQL,包括本網站。在 我們的文件 中,您會找到一系列文章,說明基本的 GraphQL 概念及其運作方式。我們的 社群頁面 充斥著可供參考的資源和可加入的社團。
有關更實用的指南,請瀏覽 How to GraphQL 全端教學網站。我們還有一個與 edX 合作的免費線上課程,探索 GraphQL:API 的查詢語言。
在您開始學習之旅之前,請務必了解 什麼是 API,以及客戶端和伺服器之間的通訊通常如何運作。
不,完全不是這樣。GraphQL 是一種規範,可以用 任何語言實作。我們的 程式碼頁面 包含許多不同程式語言的函式庫清單,以提供協助。
不過,您會有這樣的想法是可以理解的。GraphQL 是在 React 大會 上推出的,而 GraphQL.js 是迄今最廣泛使用的實作之一。我們知道這可能會令人困惑,因此我們正努力改善我們的文件,並加入更多非 JavaScript 編寫的程式碼範例。
兩者皆可。GraphQL 說明了如何在用戶端和伺服器之間交換資訊。這包括伺服器如何指出有哪些資料和作業可用、用戶端應如何格式化要求、伺服器應如何執行這些查詢,以及用戶端將收到什麼回應。
是的,GraphQL 通常透過 HTTP 提供服務。這在很大程度上是因為 HTTP 協定在我們的產業中非常普遍。但你可以透過建立單一 HTTP 要求來試用 GraphQL,這一點很有幫助。我們的透過 HTTP 提供服務文件提供了設定 GraphQL 伺服器以透過 HTTP 運作的指南。
雖然 HTTP 是用戶端伺服器協定的最常見選擇,但它並非唯一選擇。GraphQL 與傳輸層無關。因此,例如,你可以使用WebSocket來訂閱 GraphQL,而不是使用 HTTP 來使用即時資料。
在典型的 GraphQL 後端,每個類型的每個欄位都有專注的單一目的函式來解析該值。此外,GraphQL 並未嘗試在用戶端處理資料批次處理,而是將該邏輯移至伺服器。因此,有一些內在的效能優點。將過度擷取減至最少,以及減少往返伺服器的次數就是其中兩項優點。
在建構 GraphQL 實作時,應考慮其他效能因素。例如,GraphQL 服務可能會「話多」,並重複從資料庫載入資料。這通常可透過實作批次處理技術或使用 DataLoader 等工具來解決。
GraphQL 客户端可以協助您處理對GraphQL 伺服器的查詢、變異和訂閱。它們使用 GraphQL API 的底層結構來自動化特定流程。這包括批次處理、UI 更新、建置時間架構驗證等。
我們程式碼頁面上提供了各種語言的 GraphQL 客户端清單。How To GraphQL 中也深入說明了它們的優點。
不過,您不需要特定的客户端就能使用 GraphQL。您可能想從使用一般 HTTP 客户端發出 GraphQL 結果開始。然後,隨著應用程式的複雜性增加,再切換到經過 GraphQL 最佳化的客户端。
不,GraphQL 是一種通常用於遠端客戶端伺服器通訊的規範。它與所使用的資料來源無關,而且不會實作物件關聯性對應技術。不過,有專門為 GraphQL 建置的 ORM。其中一些列在我們程式碼頁面的服務區段中。
不,GraphQL 由GraphQL 基金會管理。
話雖如此,此規範最初是在 Facebook 開發,而Facebook 是GraphQL 基金會的成員。您可能會注意到,我們的一些GitHub 儲存庫仍然將授權列在 Facebook Inc. 名下。我們正在更新這些授權,並且已經轉換了主要專案,例如GraphiQL和DataLoader,以符合新的版權:「版權所有 (c) 2020 GraphQL 貢獻者」。
許多人!GraphQL 規範和所有相關專案都是開源的,因此歡迎任何人貢獻。話雖如此,儲存庫背後有一個結構。這是為了解決社群內的衝突並指導技術決策。
GraphQL 基金會為 GraphQL 提供大部分的監督。它是由來自數十家不同公司的代表組成。
GraphQL 基金會也管理著每月虛擬的 GraphQL 工作小組 (WG) 會議。這些會議旨在召集常見 GraphQL 函式庫和工具的維護人員,以及 GraphQL 社群的重要貢獻者。WG 會議完全開放。任何人都可以加入,並 提出議程項目。
在 2020 年 11 月的 WG 會議 中,宣布 GraphQL 將成立技術指導委員會 (TSC)。更多資訊即將公布。
如果這讓你感到困惑,別擔心,有很多事情正在進行中。若要取得更直觀的高階概觀,請查看 GraphQL 景觀。
GraphQL 基金會 是提供 GraphQL 治理的中立基金會。這包括對開源儲存庫、資金、活動等進行與供應商無關的監督。它由 Linux 基金會 託管,並由 來自數十家不同公司的代表 組成。其理念是為 GraphQL 社群提供一個公正開放的家園。
您可以透過造訪 foundation.graphql.org 了解更多資訊。
是的,GraphQL 被設計為可擴充的,並且在許多公司中用於極高的負載下進行生產。
GraphQL 附帶一些 內建效能提升,這些提升可能有所幫助。但是,一旦您將其推送到生產環境,您就有責任跨執行個體擴充它並監控效能。
否,或至少不是原生支援。但有一些 GraphQL 客户端 可以讓您優先建立離線功能。它們使用專門設計用於在離線時執行資料操作的功能,例如快取和服務工作人員。
您可以在我們的 程式碼頁面 上找到各種語言的 GraphQL 客户端清單。
與 GraphQL 相關的大部分安全性疑慮都適用於任何 API 或服務。以下列舉幾個範例:SQL 注入、拒絕服務 (DoS) 攻擊,或有人濫用有缺陷的驗證。但 GraphQL 也有某些特定的攻擊。例如,批次攻擊。這些攻擊會發生,因為 GraphQL 允許您在單一網路呼叫中批次處理多個查詢(或多個物件實例的請求)。
無論疑慮為何,主動出擊都很重要。有許多方法可以保護您的 GraphQL 伺服器。使用逾時、設定查詢的最大深度,以及根據伺服器完成所需時間來限制查詢,都是可能的解決方法。
有關常見安全性問題及其處理方式的概述,請查看 GraphQL 如何操作教學中的安全性 和 OWASP 的 GraphQL 參考資訊。
我們建議在 商業邏輯層 中強制執行授權行為。這樣,您對授權就只有一個真實來源。
有關更詳細的說明,請前往我們的 授權文件。
您可以使用常見模式實作驗證,例如 OAuth 或 JWT。GraphQL 規範中沒有任何關於驗證的特殊事項。
部分 GraphQL 函式庫 也包含驗證的特定協定。不過,如果您使用的是管線模式,我們建議 將 GraphQL 放在所有驗證中介軟體之後。
如果您使用 GraphQL.js 建立您的 API 伺服器,我們有關於 使用 Express 中介軟體處理驗證 的文件。
是的,可以。如果您將 GraphQL 整合到您的微服務架構中,我們建議將一個 GraphQL 架構作為 API 閘道,而不是讓您的客戶端與多個 GraphQL 服務對話。這樣,您可以將您的後端拆分為微服務,但仍然可以從單一 API 將所有資料彙總到前端。
建立 API 閘道的途徑有很多種。使用 GraphQL 的好處是,你可以利用快取、請求預算和規劃查詢排程等功能。
沒有任何因素會阻止 GraphQL 服務像其他 REST API 一樣進行版本控管。話雖如此,GraphQL 避免在設計上進行版本控管。
相反地,GraphQL 提供工具來持續建置和演進你的架構。例如,GraphQL 只會傳回明確要求的資料。這表示你可以新增新功能(以及所有相關的類型和欄位),而不會造成重大變更或使現有查詢的結果過於龐大。
你可以在我們的最佳實務範例區段中,進一步了解 GraphQL 中的版本控管運作方式。
GraphQL 的好處之一在於它具有內建文件。這表示當你使用 GraphiQL 等互動式工具時,你可以探索你的 GraphQL API 揭露哪些資料。這包括 欄位、類型 等。你也可以新增 說明欄位,提供關於你的端點的補充說明。此說明欄位支援字串和 Markdown。
對許多人來說,這提供了足夠的 API 參考文件。但它並未減少對其他形式文件的需求。你可能仍需要建立指南,說明一般概念如何與你的特定使用案例結合。
GraphQL 規格的最新工作草稿發布版本可以在 spec.graphql.org/draft 找到。先前版本也可以在與其 發布標籤 相符的永久連結中找到。
每次發布背後的所有流程都是開源的。您可以透過追蹤 graphql-spec 儲存庫中的拉取請求 來監控規格提案。您也可以在 YouTube 上觀看 GraphQL 工作小組過去關於各種提案的討論。
GraphQL 仍在發展中,非常歡迎貢獻!規格(包括 最新工作草稿)是開源的。 貢獻者指南 可在 GitHub 上找到。
不過,除了規格之外,還有更多參與 GraphQL 的方式。例如,更新 本網站和文件 上的內容。或者為 graphql-js、graphql-http、GraphiQL 或 GraphQL 基金會 維護的許多其他專案之一做出貢獻。
GraphQL 規範和相關參考實作是聯合開發基金會計畫(也是 Linux 基金會家族的一份子)。個人或企業貢獻者免費簽署一份文件,同意他們的貢獻受計畫的開放原始碼授權條款約束。由於這並非 GraphQL 基金會會員資格,因此規範會員並未決定如何編列預算。
若要簽署GraphQL 規範會員資格文件,請針對任何GitHub 上的 GraphQL 儲存庫開啟公關。
如果您的組織使用並受益於 GraphQL,請考慮透過代表您的公司開啟公關並加入 GraphQL 基金會,成為兩者的會員。
目前尚未出現在本網站上,但我們正在努力製作中。如果您想協助撰寫訂閱指南,請讓我們知道。
目前,規範包含如何撰寫和執行訂閱的詳細資訊。
基金會的主要責任是制定政策和分配預算,以最大化 GraphQL 社群的可持續性。成員參與每月召開一次的管理委員會,並決定如何分配資金。
GraphQL 基金會的資金完全來自成員的支持。管理委員會制定年度預算,以將會費發揮最大效益回饋社群。基金會分配會員募集資金的方式包括:
GraphQL 基金會預算會隨著社群需求的改變而重新調整。
與其他 Linux 基金會專案一樣,管理委員會透過投票做出決策。每張選票都具有同等權重,且沒有任何成員擁有特別的投票權或特權。章程目前將管理委員會成員限制在 25 人以內。
GraphQL 基金會會員資格開放給希望支持 GraphQL 生態系的公司。由於 GraphQL 基金會是由 Linux 基金會 託管,因此會員也必須加入 Linux 基金會。
不,基金會會員資格與技術開發社群是分開的。參與 GraphQL 開發是免費的,但你必須簽署 免費的 GraphQL 規範會員協議 才能參與。這兩件事是不同的。
成員加入基金會是為了提供必要的資金,並參與如何使用資金的決策。開發人員加入 GraphQL 規範是為了貢獻想法、程式碼和其他內容。許多公司同時進行這兩件事。
我們非常歡迎您的加入!入門的最佳方式是加入GraphQL 工作小組,該小組每月舉行一次會議。開啟一個公關請求將您自己新增至議程,歡迎您加入。
否則,您可以參與我們的任何其他專案。
GraphQL 基金會由 Apollo、AWS、Butterfly Network、Dgraph Labs、Facebook、Gatsby、GraphZen、Hasura、IBM、Intuit、Neo4j、Novvum、Pipefy、Salsify、Solo.io 和 Thicit 共同創立。
您可以在GraphQL 基金會成員頁面上進一步瞭解我們的成員資格。
您可以填寫我們的會員申請表,成為 GraphQL 基金會和 Linux 基金會的會員。