在此之前,我們有介紹 HTTP 網路通訊協定,除了這個通訊方法外,今天要介紹一個 Google 開發的 RPC架構,就是 gRPC,這是你學習 Go 語言後,再發後端時,必定會碰到的。
先介紹一下什麼是 gRPC,gRPC 是使用 Protobuf 來進行序列化協定設計,Protobuf 是 Protocol Buffers的簡稱,為二進位制訊息,這使得 Server 端和 Client 端上序列化更下迅速 。
gRPC 也是基於 HTTP/2 設計的, HTTP/2 通訊協定在傳送和接收時都表現的精簡且有效率。
在 Go 語言裡要使用 gRPC 前,你必須先載入套件,
$ go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
$ go get -u google.golang.org/grpc
這麼一來,就可以用指令來產生 .pb.go 檔,待會會有範例來示範。
在你開發 gRPC 的 API 之前,你需要先定義好自己的 Protobuf ,你需要開一個以 .proto 為結尾的檔案,這邊先看一下範例:
syntax = "proto3";
package student;
service WebServer {
rpc GetStudentData (GetStudentDataReq) returns (GetStudentDataRes) {}
}
message GetStudentDataReq {
int64 student_id = 1;
string class = 2;
}
message GetStudentDataRes {
string student_name = 1;
float64 student_heigh = 2;
float64 student_weight = 3;
}
先來解釋上述的的程式碼,需要先在 service 裡頭先定義 api,並且包含他的 request 和 response,
而在定義 request 和 response 裡頭的參數時,有比較嚴格的規定,在參數名稱前,須先定義它的型態,也就是說輸入的型態要符合才可以,而在參數後面會有一個 = <數字>,這是有嚴格規定的,必須按照順序來填,第一個就等於 1,以此類推。這樣你就完成了你的 proto擋了。
而剛剛有提到產生 .pb.go 檔,就是以 proto 檔來產出,在專端機下指令:
$ protoc --go_out=plugins=grpc:. *.proto
這樣就可以產出你的 .pb.go 檔了。
今天帶來如何在 Go 語言中使用 gRPC 的前置作業,使用起來不會太過複雜,很方便可以建構出基本的架構,下回會帶來 gRPC Server 和 Client。
感謝各位讀者今天的閱讀,希望對你有幫助!