Architecture Decision Record

Active theme: Light

← 決策記錄範例

架構決策記錄:API 使用 JSON 還是 gRPC

狀態

已接受

背景

我們正在為一項將被多個客戶端使用的新服務設計 API。我們一直在考慮實現該 API 的兩種方案:基於 HTTP 的 JSON,或 gRPC。

基於 HTTP 的 JSON 是構建 API 時被廣泛使用的方式,許多程式語言和框架都支援它。這種方式簡單、輕量且易於理解,是許多專案的好選擇。然而,它的效率可能低於其他方案,尤其是在處理大量資料時。

另一方面,gRPC 是一項較新的技術,提供了一種更高效的 API 構建方式。它使用二進位制序列化來傳輸資料,可能比使用 JSON 更快、更緊湊。gRPC 還支援雙向流,因此是實時應用的好選擇。

決策

在權衡了兩種方案的利弊之後,我們決定為我們的 API 使用 gRPC。雖然基於 HTTP 的 JSON 是更簡單的方案,但我們相信 gRPC 將為我們的服務提供更高效、更具可擴充套件性的解決方案。我們還預計我們的 API 將處理大量資料,而 gRPC 的二進位制序列化對這種場景會更高效。

此外,我們相信 gRPC 對雙向流的支援,將有利於我們將來可能開發的實時應用。

後果

選擇 gRPC 之後,與使用基於 HTTP 的 JSON 相比,我們需要使用另一套工具和庫來構建 API。這可能需要額外的時間和精力來學習和實現這些技術。此外,想要使用我們 API 的客戶端需要使用相容 gRPC 的庫,而這些庫的受支援程度可能不如基於 HTTP 的 JSON 庫那樣廣泛。

不過,我們相信使用 gRPC 的好處超過這些潛在的缺點,並且我們有信心這一決策將帶來更高效、更具可擴充套件性的 API。