最近因為有大資料傳輸的需求,所以嘗試了許多手段來減少傳輸資料到客戶端的壓力,因此就看到 gRPC 這個技術,在說明這技術之前這一篇先針對其開發的一些方法來加以說明。
關於 gRPC
首先說明一下gRPC是幹甚麼用的,對於網路程式開發最常處理的就是資料的傳遞,而gRPC是資料傳遞的一種方式,這時不得不提到老牌的傳輸方式Http Api,所以這兩者之間有何差別呢。
Http Request
首先針對老牌的 Http Request 說明,這是網頁程式資料傳遞的基礎,在這協定中定義了要如何從客戶端發起請求向伺服器端取的資訊,由於這協定傳書的資料都是以明文的方式傳遞,所以資料的大小相對就比較大。雖然目前可以針對該傳遞的資料做 gzip 之類的壓縮後傳遞。
除了傳輸檔案大小問題,在將伺服器中的資料轉換成文本的序列化以及客戶端收到資料的反序列化來說都是效能上的考量。
最後一點是對於資料的是沒有規範的,原則上就是客戶端收到資訊後針對收到的資訊做自己解析並利用即可,所以後來才衍生出OpenApi這種說明 Api 的規格的規範。
綜合以上幾點才催使 gRPC 的誕生。
gRPC
gRPC 是 Google 發起的一個開源遠端程序呼叫系統,主要的目的就是透過 Protocol Buffers 的協定來將傳遞的資訊給序列話後壓縮傳遞到客戶端,待客戶端收到資訊後做解壓縮以及反序列化的動作。
因此透過 gRPC 客戶端提交的請求以及收到的回應不再是文本而是模型的實體。
用 .Net Core 寫一個 gRPC 伺服器
說了那麼多歷史沿革相關的內容後,接下來實際帶大家用一個簡單的例子用 .Net Core 做一個簡單的 gRPC 伺服器。首先使用以下指令產生專案資料即可。
dotnet new grpc -o gRpc
再來只要執行該專案即可。
如何使用 Postman 來測試 gRPC
建立伺服器後就是本文的重點,接下來跟大家介紹如何透過 Postman 來測試剛剛寫的 gRPC 伺服器。這部分的做法是參考 三種好用的 gRPC 測試工具 才發現 Postman 現在也支援 gRPC,所以接下來針對剛剛建立的 gRPC 伺服器來測試。
首先針對我們的 proto 文件把他加入到 Postman裡面,加入的方式首先選擇新增一份API文件如下圖所示
接下來點擊 Create an API
後會進入以下輸入Api資料的畫面,在此畫面輸入Api的名稱以及版號後點擊 Create API
點擊完 Create API 後會進入 API的描述頁面,此時點擊 Definition
會顯示預設的 proto 範本如下圖所示
當然這內容不是我們的 proto 資料,所以我們再把以下的 proto 資料輸入該處即可。
syntax = "proto3";
option csharp_namespace = "GrpcServiceServer";
package greet;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply);
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings.
message HelloReply {
string message = 1;
}
以上步驟我們完成了新的 proto 定義,接下來要產生一個 gRPC 的請求,首先點擊下圖的 New
按鍵
按下了 New 之後會產生 以下 產生請求的對話框,這時選擇 gRPC 這個按鈕
點擊之後會出現新增請求的對話框,此時將 Url
填好,選擇 Method
以及請求參數後 點擊 Invoke
級可以發出 gRPC 的請求到 伺服器端。
這邊關於 Method
需要說明一下,當擊之後會先是選擇Api文件的對話框,如下所示
選擇完文件之後才是選擇 Api 的 Method 的對話框,如下所示
當完成以上的部分,也輸入了請求的參數後,點擊 Invoke
會看到以下的請求結果。
結論
透過這篇的介紹希望能讓大家對於 gRPC 有一個基礎的認識,再來可以在 .Net Core 上使用 gRPC 來開發,最後透過 Postman 來測試開發的 gRPC 伺服器。