在前面我們有介紹http的方式,來讓服務可以被使用者呼叫,
除了那個方法外,還有另一個方式來跟其他服務或讓使用者呼叫,也就是GRPC。
GRPC是google開發的RPC架構,基於HTTP/2協定跟Protocol Buffers的序列化協定設計。
通常會由Server端跟Client端組成。
有著以下優點:
還有其他優點像是嚴格定義輸出跟輸入的值,或是支援向前/向後相容 等等,在這邊只先介紹一些。
要使用GRPC前,必須要先定義Protocol Buffers,Protocol Buffers是google公司定義的一種資料格式,
有點類似定義該服務有哪些API,那些API需要帶入哪些請求參數跟回應參數,
基本上都是以.proto結尾,這邊先定義一個範例。
service WebServer {
rpc UpdateUserData (UpdateUserDataRequest) returns (UpdateUserDataReply) {}
}
message UpdateUserDataRequest {
int64 user_id = 1;
string user_name = 2;
string email = 3;
}
message UpdateUserDataReply {
string success = 1;
}
上面可以看到,我們定義了一個方法,他的請求參數跟回應參數也都嚴格定義,
代表你沒辦法傳字串(string)進去user_id,
就不會出現使用者跟server參數型別搞不定的問題。
要在go內使用grpc,必須先從Protocol Buffers建出grpc套件,
首先必須要先安裝grpc-go的套件。
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u google.golang.org/grpc
安裝好了後確認bin的路徑是否正確
PATH=$PATH:$GOPATH/bin
接下來就可以下指令依Protocol Buffers建立grpc 的.pb.go檔了
protoc --go_out=plugins=grpc:. *.proto
在下一章,會介紹如何使用grpc套件建立client端跟server端