架構決策記錄:API 用 JSON 定 gRPC
狀態
已接納
背景
我哋正為一個新服務設計 API,會有多個客戶端使用。我哋一直考慮兩個實施 API 嘅選項:用 JSON over HTTP,或者用 gRPC。
JSON over HTTP 係廣泛使用嘅 API 建構方法,好多程式語言同框架都支援。呢種做法簡單、輕量而且容易明白,對好多項目嚟講都係好選擇。不過,佢可能比其他選項效率低,尤其係處理大量數據嗰陣。
另一方面,gRPC 係較新嘅技術,提供更高效嘅 API 建構方式。佢用二進制序列化傳輸數據,可以比 JSON 更快、更精簡。gRPC 亦支援雙向串流,非常適合即時應用程式。
決策
考慮過兩個選項嘅利弊之後,我哋決定 API 用 gRPC。雖然 JSON over HTTP 係較簡單嘅選項,但我哋相信 gRPC 可以為我哋嘅服務提供更高效同可擴展嘅方案。我哋亦預期 API 會處理大量數據,而 gRPC 嘅二進制序列化對呢個使用情況會更高效。
此外,我哋相信 gRPC 對雙向串流嘅支援,對我哋日後可能開發嘅即時應用程式會有好處。
後果
揀選 gRPC 之後,同用 JSON over HTTP 比較,我哋需要用另一套工具同程式庫去建構 API。咁樣可能需要額外時間同心力去學習同實施呢啲技術。另外,想用我哋 API 嘅客戶端,需要用兼容 gRPC 嘅程式庫,而呢啲程式庫嘅支援可能冇 JSON over HTTP 程式庫咁廣泛。
不過,我哋相信用 gRPC 嘅好處大過呢啲潛在缺點,亦有信心呢個決策會帶來更高效同可擴展嘅 API。