精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Golang 語言 gRPC 服務怎么同時支持 gRPC 和 HTTP 客戶端調用?

開發 前端
gRPC 客戶端服務的前提下,gRPC 服務端服務怎么同時支持 gRPC 和 HTTP 客戶端調用?今天我們介紹一個 protoc 插件 gRPC-Gateway。

01介紹

關于 gRPC 的文章,我們之前寫過幾篇,如果讀者朋友還對 gRPC 不了解,我建議您可以翻閱一下公眾號的歷史文章。

當我們需要提供 gRPC 服務的 RESTful API 時,可以先創建一個 gRPC 客戶端服務,在 gRPC 客戶端服務編寫 RESTful API,接收到 HTTP 請求時,通過 gRPC 客戶端服務調用 gRPC 服務端服務的方法。

相信讀者朋友們也意識到,僅僅為了提供 RESTful API 而編寫一個 gRPC 客戶端服務,顯然有些小題大做。

在不借助 gRPC 客戶端服務的前提下,gRPC 服務端服務怎么同時支持 gRPC 和 HTTP 客戶端調用?今天我們介紹一個 protoc 插件 gRPC-Gateway。

02gRPC-Gateway

gRPC-Gateway 是 protoc 的一個插件。它讀取 gRPC 服務定義并生成一個反向代理服務器,該服務器將 RESTful JSON API 轉換為 gRPC。此服務器是根據 gRPC 定義中的自定義選項生成的。

gRPC-Gateway 可幫助您同時以 gRPC 和 RESTful 風格提供 API。

在我們開始編碼之前,需要一些先決條件。

首先,我們需要先搭建一個 Go 環境。

使用 go get 工具下載一些依賴包。

使用 go mod init 工具創建一個 go.mod 文件。

依賴包列表:

$ go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
$ go get google.golang.org/protobuf/cmd/protoc-gen-go
$ go get google.golang.org/grpc/cmd/protoc-gen-go-grpc

03gRPC-Gateway 實戰

在完成以上先決條件后,我們創建一個 gRPC 服務端服務,本文我們創建一個 ToDoList gRPC 服務。在創建 gRPC 服務之前,我們使用 protocol buffers 創建一個 proto 文件。

創建 proto 文件

...
service ToDoList {
rpc CreateToDoList (ToDoListDetail) returns (CreateToDoListResult) {}
rpc ReadToDoList (ToDoListPage) returns (ReadToDoListByPage) {}
}
...

生成 gRPC 服務端存根

使用 protoc 命令工具生成存根

protoc -I proto \
--go_out ./pb/todoPb --go_opt paths=source_relative \
--go-grpc_out ./pb/todoPb --go-grpc_opt paths=source_relative \
proto/toDoList.proto

執行上面 protoc 命令工具,生成一個 *.pb.go 文件和一個 *_grpc.pb.go 文件。

編寫剩余 Go 代碼

創建 main.go

func main() {
InitEngine()
lis, err := net.Listen("tcp", address)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
server := grpc.NewServer()
pb.RegisterToDoListServer(server, new(service.ToDoList))
log.Printf("server listening at %v\n", lis.Addr())
if err := server.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}

添加 gRPC-Gateway 選項

gRPC-Gateway 使用 google.api.http 選項定義 gRPC 服務如何映射到 JSON 請求和響應,使用 protoc 時,每個 RPC 必須使用 google.api.http 選項定義 HTTP 方法和路徑。

因此,我們需要將 google/api/http.proto 導入添加到 proto 文件中。我們還需要添加我們想要的 HTTP -> gRPC 映射。

syntax = "proto3";

import "google/api/annotations.proto";

service ToDoList {
rpc CreateToDoList (ToDoListDetail) returns (CreateToDoListResult) {
option (google.api.http) = {
post: "/v1/todolist/add"
body: "*"
};
}
rpc ReadToDoList (ToDoListPage) returns (ReadToDoListByPage) {
option (google.api.http) = {
get: "/v1/todolist/select"
};
}
}
...

關于 HTTP 和 gRPC 映射的更多內容,可以參閱 Google API 文檔。

生成 gRPC-Gateway 存根

現在,我們已將 gRPC-Gateway 選項添加到 proto 文件中,我們需要使用 gRPC-Gateway 生成器來生成存根。

在使用 protoc 生成存根之前,我們需要將一些依賴項復制到 proto 文件目錄中。將 googleapis 的子集從官方存儲庫下載并復制到本地 proto 文件目錄中。如下所示:

.
├── dao
│ ├── mysql.go
│ └── toDoList.go
├── grpc-gateway
│ └── main.go
├── main.go
├── pb
│ └── todoPb
│ ├── toDoList.pb.go
│ ├── toDoList.pb.gw.go
│ └── toDoList_grpc.pb.go
├── proto
│ ├── google
│ │ └── api
│ │ ├── annotations.proto
│ │ └── http.proto
│ └── toDoList.proto
└── service
└── toDoList.go

使用 protoc 生成存根

protoc -I proto \
--go_out ./pb/todoPb --go_opt paths=source_relative \
--go-grpc_out ./pb/todoPb --go-grpc_opt paths=source_relative \
--grpc-gateway_out ./pb/todoPb --grpc-gateway_opt paths=source_relative \
proto/toDoList.proto

protoc-go-inject-tag -XXX_skip=xorm -input=./pb/todoPb/toDoList.pb.go

執行以上 protoc 命令工具,生成一個 *.gw.pb.go 文件。

創建 grpc-gateway 目錄,并創建 main.go 文件,創建 gRPC-Gateway 多路復用器。

func main() {
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
defer cancel()

mux := runtime.NewServeMux()
opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}
err := pb.RegisterToDoListHandlerFromEndpoint(ctx, mux, grpcServerEndpoint, opts)
if err != nil {
log.Fatalf("Fail to register gRPC gateway service endpoint: %v", err)
}

if err = http.ListenAndServe(":8080", mux); err != nil {
log.Fatalf("Could not setup HTTP endpoint: %v", err)
}
}

啟動服務

grpc 服務

go run main.go

gRPC-Gateway

go run grpc-gateway/main.go

cURL 測試

curl http://127.0.0.1:8080/v1/todolist/select?page=1&count=2

響應結果:

{
"todolist": [
{
"id": "1",
"content": "編程寫代碼",
"datetime": "1632541505",
"created": "1632541505",
"updated": "1632541505"
},
{
"id": "2",
"content": "編程寫代碼",
"datetime": "1632543373",
"created": "1632543373",
"updated": "1632543373"
}
]
}

04總結

本文我們介紹 gRPC-Gateway 如何實現同時支持 gRPC 和 RESTful 風格的 API。

當 HTTP 請求到達 gRPC-Gateway 時,它會將 JSON 數據解析為 protobuf 消息。然后,它使用解析的 protobuf 消息發出正常的 Go gRPC 客戶端請求。

Go gRPC 客戶端將 protobuf 結構編碼為 protobuf 二進制格式,并將其發送到 gRPC 服務器。gRPC 服務器處理請求并以 protobuf 二進制格式返回響應。

Go gRPC 客戶端將其解析為 protobuf 消息,并將其返回到 gRPC-Gateway,后者將 protobuf 消息編碼為 JSON 并將其返回到原始客戶端。

圖片來自 gRPC-Gateway 官方文檔


責任編輯:武曉燕 來源: Golang語言開發棧
相關推薦

2022-04-29 11:52:02

API代碼HTTP

2021-09-13 05:02:49

GogRPC語言

2021-10-18 05:00:38

語言GoRequestHTTP

2021-07-28 11:46:51

工具gRPC客戶端

2021-09-26 10:20:06

開發Golang代碼

2021-09-01 23:29:37

Golang語言gRPC

2022-01-05 08:03:23

C#通信Rest

2021-05-07 15:28:03

Kafka客戶端Sarama

2021-11-29 07:47:57

gRPCGUI客戶端

2025-01-13 06:00:00

Go語言gRPC

2025-02-04 13:53:18

NixGogRPC

2023-03-28 07:03:15

gRPCMetadata

2024-04-22 09:30:24

2023-03-02 07:20:10

GRPC服務健康檢查協議

2024-02-05 08:50:57

Golang標準庫客戶端

2025-05-20 09:39:57

GogRPC微服務

2023-09-06 07:17:57

2023-06-10 23:01:41

GrpcProtobuf數據

2009-12-21 10:19:05

Silverlight

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端
點贊
收藏

51CTO技術棧公眾號

97人人爽人人| 亚洲一卡二卡三卡| 亚洲永久精品在线观看| 色97色成人| 精品日韩av一区二区| 国产男女无遮挡| 免费观看久久久久| 不卡视频一二三四| 国产精品中文久久久久久久| 九九视频免费看| 欧美精品一区二区三区中文字幕 | 青青草免费在线视频观看| 欧美在线 | 亚洲| 免费成人美女在线观看.| 久久久久久久久久亚洲| 国精产品视频一二二区| 色婷婷av一区二区三区丝袜美腿| 欧美老女人第四色| 2018中文字幕第一页| h视频在线播放| av成人老司机| 91色精品视频在线| 亚洲中文字幕无码爆乳av| 国内精品嫩模av私拍在线观看| 亚洲夜晚福利在线观看| 一级黄色片毛片| 粉嫩一区二区三区在线观看| 在线视频亚洲一区| 99精品人妻少妇一区二区| 羞羞视频在线观看不卡| 中文字幕免费在线观看视频一区| 久久国产精品 国产精品| www.看毛片| 久久福利资源站| 国产精品电影网站| 国偷自拍第113页| 亚洲第一黄网| 欧美精品久久久久久久| 三级黄色录像视频| 欧美电影免费| 色播久久人人爽人人爽人人片视av| 四季av综合网站| 91久久精品无嫩草影院| 日韩午夜小视频| aaa一级黄色片| 四虎成人精品一区二区免费网站| 91福利在线导航| 日韩中文字幕二区| 久久r热视频| 一本一道久久a久久精品综合蜜臀| 日韩五码在线观看| 97人人爽人人澡人人精品| 亚洲女性喷水在线观看一区| 中文字幕av导航| 米奇精品一区二区三区| 国产精品乱码一区二区三区软件 | 高潮白浆女日韩av免费看| 黄色一级片国产| 国产美女情趣调教h一区二区| 亚洲精品ww久久久久久p站| 国产日韩欧美大片| 日本成人不卡| 午夜精品久久久久| 女性女同性aⅴ免费观女性恋 | 亚洲不卡一区二区三区| 国产手机免费视频| 国产调教在线| 日韩欧美成人精品| 中文字幕国产传媒| **国产精品| 欧美不卡激情三级在线观看| 你懂的在线观看网站| 亚洲图区在线| 在线亚洲国产精品网| 久艹在线观看视频| 国模 一区 二区 三区| 18久久久久久| 中文字幕人妻一区二区在线视频| 久久国产麻豆精品| 99re在线视频观看| 头脑特工队2免费完整版在线观看| 久久蜜桃一区二区| 中文字幕免费在线不卡| 欧美xxxx性xxxxx高清| 欧美日韩免费在线观看| 99热手机在线| 视频免费一区二区| 亚洲女人被黑人巨大进入al| 成年人免费视频播放| 国产精品观看| 国产成人精品一区| 国产黄频在线观看| 国产亚洲精品aa午夜观看| 伊人久久av导航| 国产一二在线播放| 欧美日韩午夜影院| 国产又黄又粗又猛又爽的视频| av中文一区| 久久久久久国产精品美女| 4438国产精品一区二区| 国产久卡久卡久卡久卡视频精品| 精品蜜桃一区二区三区| 欧美精品电影| 欧美日韩中文字幕日韩欧美| 免费网站在线观看黄| 日韩av资源网| 欧美久久精品一级黑人c片| 羞羞影院体验区| 国产精品一区二区在线观看不卡| 欧美第一黄网| 免费毛片在线看片免费丝瓜视频 | 国产精品自产拍高潮在线观看| 亚洲国产精品久久久久爰性色| 久久久久国产免费免费| 毛片在线视频观看| 国产激情欧美| 亚洲欧美国产视频| 久久久久久国产精品免费播放| 日日骚欧美日韩| 国产综合第一页| 国产原创精品视频| 欧美在线三级电影| 粉嫩av懂色av蜜臀av分享| 一区二区蜜桃| 成人免费视频网| av网站在线播放| 欧美午夜精品久久久久久人妖| 日本wwww色| 亚洲精品一二三区区别| 国产裸体写真av一区二区| 涩爱av在线播放一区二区| 亚洲在线免费播放| 中国特级黄色片| 欧美一区激情| 91最新在线免费观看| 999在线视频| 欧美亚洲综合另类| 国产sm调教视频| 亚欧美中日韩视频| 欧美激情专区| 中文字幕高清在线播放| 日韩激情片免费| 国语对白永久免费| 2024国产精品| 久久久噜噜噜www成人网| 精品素人av| 高清欧美一区二区三区| 亚洲老妇色熟女老太| 一区二区久久久久久| 女同性αv亚洲女同志| 欧美喷水视频| 国产精品午夜av在线| 麻豆av在线免费观看| 精品久久久三级丝袜| 日韩成年人视频| 99国产精品国产精品毛片| 97超碰在线人人| 色老板在线视频一区二区| 欧美一级电影在线| 成人动漫在线免费观看| 欧美色综合网站| 成人性视频免费看| 韩国v欧美v日本v亚洲v| 日韩精品免费一区| 老司机精品在线| 青青久久aⅴ北条麻妃| 国际av在线| 欧美绝品在线观看成人午夜影视| 黑鬼狂亚洲人videos| 国产盗摄视频一区二区三区| 国产天堂视频在线观看| 国产精品一区二区中文字幕| 91爱爱小视频k| 97超碰人人在线| 日韩欧美国产三级| 日韩特级黄色片| 国产精品麻豆一区二区| 免费人成视频在线播放| 国产精品最新自拍| 一区不卡视频| 成人资源在线播放| 国产成人亚洲精品| 黄色视屏免费在线观看| 亚洲成人久久网| 在线免费一区二区| 亚洲影视在线播放| 能免费看av的网站| 国产乱人伦偷精品视频不卡| 波多野结衣家庭教师在线播放| 成人黄色av| 国产精成人品localhost| 韩日精品一区二区| 色综合91久久精品中文字幕| 欧美xxx.com| 欧美一区二区三区小说| 九一国产在线观看| 亚洲欧美日韩一区二区 | 亚洲香蕉视频| 亚洲精品免费一区二区三区| 免费高潮视频95在线观看网站| 在线观看日韩视频| 天天躁日日躁狠狠躁伊人| 一区二区三区视频| 国产亚洲精aa在线看| 2018中文字幕一区二区三区| 日韩欧美小视频| 日韩av综合网| 国产aⅴ一区二区三区| 欧美性猛交xxxx乱大交3| 婷婷伊人五月天| 国产日韩综合av| 图片区偷拍区小说区| 捆绑紧缚一区二区三区视频| 国产av麻豆mag剧集| 亚洲成人一区| 先锋影音日韩| 嫩草影视亚洲| 好吊色欧美一区二区三区四区 | 亚洲成人99| 欧日韩一区二区三区| 国产精品22p| 91av免费看| 中文成人激情娱乐网| 国产精品一二三在线| 欧美日韩大片| 2023亚洲男人天堂| 超碰中文在线| 欧美黑人狂野猛交老妇| 日本a级在线| 中文字幕日韩欧美在线视频| 久草视频在线看| 亚洲精品色婷婷福利天堂| 欧日韩在线视频| 精品精品欲导航| www.国产.com| 日韩欧美专区在线| av在线免费在线观看| 宅男噜噜噜66一区二区66| 中文字幕自拍偷拍| 欧美午夜免费电影| 一区二区视频免费| 欧美揉bbbbb揉bbbbb| 日本精品入口免费视频| 91精品办公室少妇高潮对白| 中文字幕av影院| 色综合久久综合| www.色国产| 91久久线看在观草草青青| 草莓视频18免费观看| 91官网在线免费观看| 欧美高清69hd| 欧美人牲a欧美精品| 国产又粗又猛又色又| 91精品婷婷国产综合久久性色| 91禁在线观看| 日韩一区二区免费电影| 亚洲国产福利视频| 日韩av中文字幕在线播放| 美州a亚洲一视本频v色道| 国产一区二区动漫| 欧美a免费在线| 久久久成人精品视频| 污污影院在线观看| 久久久久亚洲精品| 中文字幕在线高清| 国产精品久久久| 国产乱码精品一区二区三区亚洲人| 亚洲尤物视频网| 国产精品对白| 日产精品一线二线三线芒果 | 青青在线免费观看| 免费在线成人| 欧美美女一级片| 成人晚上爱看视频| 中文字幕一区二区三区人妻电影| 国产丝袜美腿一区二区三区| 天天爽天天爽天天爽| 亚洲一区电影777| 精品视频一二三区| 日韩女优视频免费观看| 五月激情六月婷婷| 中文字幕av日韩| 四虎av在线| 日韩av免费一区| 国产一区二区视频在线看| 国产精品v欧美精品∨日韩| 九色精品国产蝌蚪| dy888午夜| 欧美亚洲自偷自偷| 热久久久久久久久| 不卡高清视频专区| 亚洲精品电影院| 午夜伦欧美伦电影理论片| 中文字幕第315页| 精品999在线播放| 调教视频免费在线观看| 国内精品视频久久| 麻豆久久久久| 久久久久久九九| 欧美国产91| 亚洲欧美激情网| 成人动漫一区二区在线| 在线观看天堂av| 日韩欧美亚洲综合| 丰满少妇一级片| 中文字幕在线成人| 范冰冰一级做a爰片久久毛片| 亚洲一区二区三区777| 狠狠色丁香婷婷综合影院| 91精品国产毛片武则天| 日韩福利电影在线| 91视频啊啊啊| 一区二区三区在线视频观看| 在线视频你懂得| 亚洲免费视频在线观看| 国产精品—色呦呦| 91免费视频国产| 日韩电影免费网站| 欧美视频第一区| 成人激情午夜影院| 久草成人在线视频| 91精品国产综合久久久久| jizz亚洲| 国产精品wwww| 希岛爱理av免费一区二区| 国产一级做a爰片久久毛片男| 久久97超碰国产精品超碰| 日本精品在线观看视频| 精品福利在线视频| 欧美亚洲精品在线观看| 欧美成人精品在线观看| 不卡一区视频| 艳色歌舞团一区二区三区| 日韩二区在线观看| 日本精品在线观看视频| 色菇凉天天综合网| 美国成人毛片| 国产成人精品999| 你懂的一区二区三区| 免费黄色福利视频| 99久久国产免费看| 日本天堂网在线观看| 精品国产一区二区三区四区四| 羞羞网站在线看| 国产精品二区在线| 欧美日韩p片| 国产精品久久久久久在线观看| 夜夜精品视频一区二区| 亚洲爱爱综合网| 国内精品久久久久久久| 精品人人人人| 国模杨依粉嫩蝴蝶150p| 国产丝袜欧美中文另类| 亚洲特级黄色片| 久久精品国产欧美亚洲人人爽| 成人在线视频www| 日韩精品福利片午夜免费观看| 国产精品中文有码| 国产精品18p| 亚洲男人天堂网| 久久亚洲国产精品尤物| 超碰97免费观看| 成人午夜伦理影院| 91蜜桃视频在线观看| 亚洲精品视频免费| 国产经典一区| 国产精品久久成人免费观看| 成人一级视频在线观看| 国产又黄又爽又色| 色琪琪综合男人的天堂aⅴ视频| 亚洲午夜剧场| av网站大全免费| 日本一区二区三区国色天香| 亚洲天堂avav| 欧美激情成人在线视频| 亚洲精品国产精品粉嫩| 在线观看av网页| 一级特黄大欧美久久久| 亚洲aaa在线观看| 国产美女91呻吟求| 亚洲精华国产欧美| 精品欧美一区二区久久久| 欧美一区日本一区韩国一区| 美女日批视频在线观看| 日韩精品伦理第一区| 国产麻豆精品在线观看| 毛片在线免费视频| 日韩中文字幕欧美| 极品束缚调教一区二区网站| 三级在线视频观看| 一区二区三区日韩精品| 飘雪影视在线观看免费观看| 亚洲一区二区免费| 久久一区二区三区超碰国产精品| 性欧美videos| 亚洲性xxxx| 精品国产一区二区三区成人影院| 久久人人爽av| 欧美性xxxx极品hd满灌| 羞羞视频在线观看不卡|