twirp: 支援protobuf服務定義的簡單RPC框架

banq發表於2018-10-31

結構化RPC比面向URL的REST API更容易設計和維護,因為他們讓你專注於業務邏輯,而不是路由方案。更改API包括新增新欄位或方法更容易,並且可以隱藏序列化的特性(例如,JSON缺少64位數字)。

gRPC實現了結構化RPC,但人們發現其複雜性和蔓延帶來了無法接受的錯誤數量 - 而且我們無法證明其嚴格的http/2要求。


Twirp是服務到服務通訊的框架,強調簡單性和極簡主義。由API定義檔案能生成路由和序列化,讓你專注於應用程式的邏輯,而不是考慮像HTTP方法和路徑和JSON。

Twirp 非常簡單,您可以使用cURL在命令列上生成有效請求,而無需過多考慮。它就像Content-Type標頭,適當的有效負荷和正確的URL一樣簡單 - 所有這些都非常標準化。所以,例如:

# 這是一個有效的Twirp請求:
curl \
 -header 'Content-Type:application/json' \
 -data '{"user": "spencer", "email": "spencer@twitch.tv"}' \
 http://localhost:9090/twirp/twitch.example.EmailBoss/UpdateEmail
<p class="indent">


如果您在面向服務的體系結構SOA和普通程式中工作,我們認為您應該使用Twirp。我們還認為,即使您使用多種非Go語言,您也可以一次將其放入系統中。Twirp的核心設計與語言無關,我們計劃擴充套件到新的語言,但我們的Go實現已經穩定並且能夠為繁重的生產負載提供服務。

在Protobuf檔案中定義您的服務, 然後Twirp使用伺服器介面和功能齊全的客戶端自動生成Go程式碼。它與gRPC類似,但沒有自定義HTTP伺服器和傳輸實現:它執行在標準庫的經過良好測試和高效能的net/http伺服器上。它可以在HTTP 1.1上執行,而不僅僅是http / 2,並且支援JSON客戶端以便跨語言輕鬆整合

Twirp以經過充分測試,標準化,周到的方式為您處理路由和序列化,因此您不必再自己實現,序列化和反序列化程式碼容易出錯並且很棘手,你不應該浪費時間來決定它是“POST /friends/:id/new" 或 "POST /:id/friend"或者其他什麼。

在此過程中,您將獲得一個自動生成的客戶端和一個簡單,智慧的框架,用於傳遞錯誤訊息。

它比 grpc 好得多, 因為它使用的是原生的http客戶端,能為所有語言的伺服器服務!

相關文章