REST、gRPC 和 GraphQL API 架構設計比較:優缺點及適用場景

更新於 發佈於 閱讀時間約 5 分鐘

在當今的應用程序開發中,API(Application Programming Interface)設計已經成為連接不同系統、應用或服務的關鍵。隨著技術的發展,出現了多種 API 架構設計模式,每種模式都有其特點和應用場景。今天,我們將探討三種主流的 API 架構設計:RESTgRPCGraphQL,並比較它們的優缺點及適用場景。


1. REST(Representational State Transfer)

REST 是最早出現且最為廣泛使用的 API 架構設計之一。它基於 HTTP 協議,利用標準的 HTTP 方法(如 GET、POST、PUT、DELETE)來操作資源。RESTful API 的一大優點是其簡單性和可讀性,開發者只需理解 HTTP 協議,即可輕鬆使用和集成 RESTful API。

  • 優點
    • 容易理解和實現,基於標準的 HTTP 方法。
    • 廣泛支持,適合大多數 Web 應用。
    • 良好的可擴展性和可讀性。
  • 缺點
    • 有時會出現冗餘的數據傳輸,因為每個請求都返回整個資源。
    • 不支持實時更新(需通過 WebSocket 或其他技術實現)。
    • 當資源模型變得複雜時,可能會導致 URI 變得冗長且難以維護。
  • 使用情境
    • 適合需要穩定、廣泛兼容的應用,如公共 API、微服務架構中的基本服務等。

2. gRPC(Google Remote Procedure Call)

gRPC 是由 Google 開發的高性能 RPC 框架,基於 HTTP/2 協議。與 REST 不同,gRPC 使用 Protocol Buffers(protobuf)作為序列化格式,這使得數據傳輸更加高效。gRPC 支持雙向流通信,適合低延遲和高吞吐量的應用場景。

  • 優點
    • 高效的二進制序列化格式,減少帶寬佔用。
    • 支持 HTTP/2,實現多路復用、雙向流通信和頭部壓縮,降低延遲。
    • 自帶接口定義語言(IDL),支持多語言自動生成客戶端和服務端代碼。
  • 缺點
    • 比 REST 更加複雜,需要學習 protobuf 和 gRPC 的特定概念。
    • 不易於調試和分析,因為數據在傳輸過程中是二進制格式。
    • 不直接支持瀏覽器,需額外的代理層或轉換層。
  • 使用情境
    • 適合需要高性能和低延遲的應用,如微服務之間的通信、大規模分佈式系統、流媒體服務等。

3. GraphQL

GraphQL 由 Facebook 開發,是一種查詢語言,用於 API 的數據獲取。與 REST 的靜態結構不同,GraphQL 允許客戶端指定所需的數據結構,避免了過多的數據傳輸問題。GraphQL 的彈性使得它成為現代 Web 和移動應用的流行選擇。

  • 優點
    • 客戶端可以精確指定所需的數據,減少不必要的數據傳輸。
    • 單一端點處理所有查詢,簡化了 API 結構。
    • 良好的文檔支持,API 自我描述性強。
  • 缺點
    • 初學者需要學習 GraphQL 的查詢語法和相關工具。
    • 由於支持複雜查詢,服務器端可能需要更多的計算資源來處理。
    • 當查詢過於複雜或深度過大時,可能會影響性能。
  • 使用情境
    • 適合需要靈活數據查詢和優化傳輸性能的應用,如移動應用、需要統一 API 端點的大型系統等。

三大 API 架構設計的比較

特性/架構RESTgRPCGraphQL

優點

簡單、易用、基於標準 HTTP 方法

高性能、低延遲、支持多語言、自動代碼生成

客戶端靈活查詢、單一端點、減少數據傳輸

缺點

數據冗餘、不支持實時更新、URI 可能冗長

複雜、難調試、不直接支持瀏覽器

需要學習新的查詢語法、服務器負擔可能增加

使用情境

公共 API、基本微服務、穩定兼容的應用

微服務間通信、大規模分佈式系統、高效應用

移動應用、需要靈活查詢的應用、單一端點

數據格式

JSON(文本格式)

Protobuf(二進制格式)

JSON(靈活結構)

傳輸協議

HTTP/1.1

HTTP/2

HTTP

實時支持

不直接支持(需使用 WebSocket 等技術實現)

支持雙向流通信,實時性強

支持實時查詢,但需額外處理


總結

選擇適合的 API 架構設計取決於具體的應用場景和需求。REST 以其簡單性和廣泛兼容性成為首選,但在高性能需求下,gRPC 和 GraphQL 可能更具優勢。了解這三種架構的優缺點及使用情境,將幫助你在設計和開發 API 時做出最佳選擇。

avatar-img
0會員
12內容數
歡迎來到 ChiYu Code Journey!這裡是我分享技術心得與開發經驗的空間,主要內容涵蓋 C#、.Net、API 開發及雲端等程式主題。偶爾也會分享一些日常生活點滴,像是我與我家可愛的法鬥相處的趣事等。希望在這裡能和大家一起學習、交流,一同踏上這段程式旅程!
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
ChiYu Code Journey 的其他內容
本文探討程式設計下的API模型設計,特別是Resource-Based API的概念,強調區分「資料」與「資源」的重要性,避免直接暴露資料庫原始資料。文中介紹MVC和MVVM架構,說明如何透過模型過濾、轉換資料,保護敏感數據並提升API靈活性及可維護性。
本文討論 API 設計中界定 API 邊界的重要性,說明如何避免多合一 API 的缺點,並透過理解業務需求、識別核心資源和劃分功能責任等步驟,設計出清晰、高效且易於維護的 API。文章以圖書館管理系統為例,說明如何界定 API 邊界,並說明正確使用 HTTP 方法和狀態碼的重要性。
本文深入探討 Web API 與 HTTP 協議,解釋 HTTP 請求方法 (GET, POST, PUT, PATCH, DELETE)、HTTP 結構 (Headers, Body, 狀態碼),。透過說明各種 HTTP 狀態碼,讀者可以更深入理解 Web API 的設計與應用。
本篇文章淺顯易懂地介紹什麼是API(應用程式介面),並以生活化的例子和C#程式碼範例說明介面的概念,以及API在不同領域的應用和優勢,例如Web API、作業系統API、庫或框架API等,並點出其在社群媒體整合、支付系統、地圖服務等日常生活中的重要性。
本文探討程式設計下的API模型設計,特別是Resource-Based API的概念,強調區分「資料」與「資源」的重要性,避免直接暴露資料庫原始資料。文中介紹MVC和MVVM架構,說明如何透過模型過濾、轉換資料,保護敏感數據並提升API靈活性及可維護性。
本文討論 API 設計中界定 API 邊界的重要性,說明如何避免多合一 API 的缺點,並透過理解業務需求、識別核心資源和劃分功能責任等步驟,設計出清晰、高效且易於維護的 API。文章以圖書館管理系統為例,說明如何界定 API 邊界,並說明正確使用 HTTP 方法和狀態碼的重要性。
本文深入探討 Web API 與 HTTP 協議,解釋 HTTP 請求方法 (GET, POST, PUT, PATCH, DELETE)、HTTP 結構 (Headers, Body, 狀態碼),。透過說明各種 HTTP 狀態碼,讀者可以更深入理解 Web API 的設計與應用。
本篇文章淺顯易懂地介紹什麼是API(應用程式介面),並以生活化的例子和C#程式碼範例說明介面的概念,以及API在不同領域的應用和優勢,例如Web API、作業系統API、庫或框架API等,並點出其在社群媒體整合、支付系統、地圖服務等日常生活中的重要性。
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
RPC(Remote Procedure Call)是一種不需要理解底層網路技術就可以透過網路請求服務。主要用於分散式系統中的服務相互呼叫。 架構 Registry:負責將服務發佈成遠端服務,管理遠端服務,提供服務。 RPC Server:負責提供操作介面。 RPC Client:負責透
※ 什麼是 RESTful API? 這種運用 HTTP 來表達語義的路由設計風格稱為 RESTful API,它描述了如何實現 Web API 的架構。所謂的 API 是應用程式介面 (application programming interface),網址也是一種應用程式的「介面」,故稱為
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當這產品的這個 API 被呼叫,再從回傳內容的某個欄位欄位來判斷,只要“這個欄位”顯示 false 就代表不支援」,雖然這樣的設計也能滿足功能需求…
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。 使用 到https://github.com/protocolbuffers/protobuf/releases下
Thumbnail
提到後端工程師,似乎就只是開發 API,但一個複雜的系統其實不太可能只透過 API 就能完成,例如一個簡單的功能,註冊會員,其實是由好幾個不同類型的工作互相配合,您才能收到開通信,才確保資料庫不會有一堆未開通帳號等。所以今天就來聊聊一個系統有幾種不同執行方式的工作。
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
GOB Go官方有提供net/rpc的RPC套件。此套件提供GOB的編/解碼,且支援TCP或HTTP傳輸方式。它可以在伺服器端註冊多個不同類型物件。 遠端存取的要求條件 方法的類型可輸出 方法的本體可輸出 方法必須要有兩個參數是輸出或內建 方法的第二個參數是指標型 方法的返回類型為
RPC(Remote Procedure Call)是一種不需要理解底層網路技術就可以透過網路請求服務。主要用於分散式系統中的服務相互呼叫。 架構 Registry:負責將服務發佈成遠端服務,管理遠端服務,提供服務。 RPC Server:負責提供操作介面。 RPC Client:負責透
※ 什麼是 RESTful API? 這種運用 HTTP 來表達語義的路由設計風格稱為 RESTful API,它描述了如何實現 Web API 的架構。所謂的 API 是應用程式介面 (application programming interface),網址也是一種應用程式的「介面」,故稱為
Thumbnail
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
Thumbnail
當這產品的這個 API 被呼叫,再從回傳內容的某個欄位欄位來判斷,只要“這個欄位”顯示 false 就代表不支援」,雖然這樣的設計也能滿足功能需求…
Thumbnail
先前幾篇筆記介紹了網路請求,瀏覽器儲存資料的方式,那麼實務上,前端最常需要發送網路請求的時候,就是透過呼叫 API,去向後端工程師發送/請求資料,所以今天來記錄什麼是 API吧!
Thumbnail
gRPC是一款跨平台、高性能的RPC框架,他可以在任何環境下執行,主要用於後端為服務開發。在用戶端應用程式中,可以像本地物件那樣呼叫遠端伺服器的方法,因此可以創建出分散式應用。 使用 到https://github.com/protocolbuffers/protobuf/releases下
Thumbnail
提到後端工程師,似乎就只是開發 API,但一個複雜的系統其實不太可能只透過 API 就能完成,例如一個簡單的功能,註冊會員,其實是由好幾個不同類型的工作互相配合,您才能收到開通信,才確保資料庫不會有一堆未開通帳號等。所以今天就來聊聊一個系統有幾種不同執行方式的工作。