本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為什麼使用 GraphQL 而不是 REST?
REST 是 Web APIs 的基石架構樣式之一。不過,隨著世界變得更加相互連結,開發強大且可擴展的應用程式的需求將成為更緊迫的問題。雖然 REST 通常用於建置 Web APIs,但已識別 RESTful 實作的幾個經常性缺點:
-
資料請求:使用 RESTful APIs,您通常會透過端點請求所需的資料。當您的資料可能無法妥善封裝時,就會發生問題。您需要的資料可能位於多層抽象後面,而擷取資料的唯一方法是使用多個端點,這表示提出多個請求來擷取所有資料。
-
過度擷取和低擷取:若要將 新增至多個請求的問題,系統會嚴格定義每個端點的資料,這表示您將傳回針對該 API 定義的任何資料,即使您的技術上不想要它。
這可能會導致過度擷取,這表示我們的請求會傳回多餘的資料。例如,假設您正在請求公司人員資料,並想要知道特定部門的員工名稱。傳回資料的端點將包含名稱,但也可能包含其他資料,例如職稱或出生日期。由於 API 是固定的,您無法僅請求名稱,其餘資料會隨附於它。
相反的情況是,我們未傳回足夠的資料稱為擷取不足。若要取得所有請求的資料,您可能需要對服務提出多個請求。視資料的結構方式而定,您可能會遇到效率不佳的查詢,導致 n+1 問題等問題。
-
緩慢的開發反覆運算:許多開發人員會量身打造 RESTful APIs,以符合其應用程式的流程。不過,隨著應用程式的成長,前端和後端都可能需要大量的變更。因此,APIs可能不再以有效率或影響的方式符合資料的形狀。由於需要 API 修改,這會導致產品反覆運算速度變慢。
-
大規模效能:由於這些複合問題,許多區域都會影響可擴展性。應用程式端的效能可能會受到影響,因為您的請求會傳回太多資料或太少 (導致更多請求)。這兩種情況都會對網路造成不必要的壓力,導致效能不佳。在開發人員方面,開發速度可能會降低,因為您的 APIs是固定的,不再符合他們請求的資料。
GraphQL 的賣點是克服 REST 的缺點。以下是 GraphQL 提供給開發人員的一些重要解決方案:
-
單一端點:GraphQL 使用單一端點查詢資料。您不需要建置多個 APIs來符合資料的形狀。這會導致通過網路的請求較少。
-
擷取:GraphQL 只需定義您需要的資料,即可解決擷取過多和不足的常年問題。GraphQL 可讓您將資料塑造成符合您的需求,因此您只會收到您要求的內容。
-
抽象:GraphQL APIs 包含幾個元件和系統,這些元件和系統使用語言無關的標準來描述資料。換句話說,資料的形狀和結構是標準化的,因此前端和後端都知道如何透過網路傳送資料。這可讓兩端的開發人員使用 GraphQL 的系統,而不是在其周圍。
-
快速反覆運算:由於資料標準化,在開發的一端可能不需要變更。例如,前端呈現變更可能不會導致大量的後端變更,因為 GraphQL 允許輕鬆修改資料規格。您可以直接定義或修改資料的形狀,以符合應用程式的成長需求。這會導致較低的潛在開發工作。
這些只是 GraphQL 的一些優點。在接下來的幾個區段中,您將了解 GraphQL 的結構方式,以及讓它成為 REST 獨特替代方案的屬性。