gRPC-Web:替代REST的gRPC的Javascript庫包
gRPC-Web是一個JavaScript客戶端庫,使Web應用程式能夠直接與後端gRPC服務通訊,而不需要HTTP伺服器充當中介。這意味著你現在可以透過使用.proto 檔案定義客戶端和伺服器端資料型別和服務介面,輕鬆構建真正的端到端gRPC應用程式架構。因此,gRPC-Web為整個REST開發Web範例提供了一個引人注目的新選擇。
需要明確的是,REST應用程式本身沒有任何問題。使用REST API伺服器構建了大量非常成功的應用程式,但是如果這些伺服器使用非HTTP協議與後端服務進行通訊,那麼需要進行大量轉換gRPC-Web的好處從“技術”上解決這個問題。
使用gRPC-Web的優點
隨著時間的推移,gRPC-Web將提供更廣泛的功能集。但我可以看到它從一開始就提供了一些巨大的勝利:
- 端到端gRPC - 如上所述,使用gRPC-Web,可以正式從堆疊中刪除REST元件並將其替換為純gRPC,從而使能夠使用Protocol Buffers建立整個 RPC管道。
- 前端和後端團隊之間更緊密的協調- 使用Protocol Buffers定義整個RPC管道,不再需要將“微服務團隊”與“客戶端團隊”分離。客戶端 - 後端互動只是一個gRPC層。
- 輕鬆生成客戶端庫- 使用gRPC-Web,意味著後端伺服器是gRPC伺服器而不是HTTP伺服器,這意味著您的所有服務都是客戶端庫也可以是gRPC庫。需要Ruby,Python,Java和其他4種語言的客戶端庫嗎?您不再需要為所有這些客戶端編寫HTTP客戶端。
下面是一個Protocol Buffer格式定義:
syntax = “proto3”; package todos; message Todo { string content = 1; bool finished = 2; } message GetTodoRequest { int32 id = 1; } service TodoService { rpc GetTodoById (GetTodoRequest) returns (Todo); } |
可以使用protoc 命令列工具根據這個.proto 定義使用生成CommonJS的客戶端程式碼:
protoc echo.proto \
--js_out = import_style = commonjs:./ output \
--grpc-web_out = import_style = CommonJS的:./輸出
現在從後端gRPC伺服器獲取TODO列表可以這麼簡單:
const {GetTodoRequest} = require(‘./todos_pb.js’); const {TodoServiceClient} = require(‘./todos_grpc_web_pb.js’); const todoService = new proto.todos.TodoServiceClient(‘http://localhost:8080’); const todoId = 1234; var getTodoRequest = new proto.todos.GetTodoRequest(); getTodoRequest.setId(todoId); var metadata = {}; var getTodo = todoService.getTodoById(getTodoRequest, metadata, (err, response) => { if (err) { console.log(err); } else { const todo = response.todo(); if (todo == null) { console.log(`A TODO with the ID ${todoId} wasn’t found`); } else { console.log(`Fetched TODO with ID ${todoId}: ${todo.content()}`); } } }); |
同樣,沒有HTTP程式碼或方法,沒有JSON解析,沒有頭Header協商。您宣告瞭資料型別和服務介面,並且gRPC-Web摘錄了所有“hard wiring”樣板程式碼,為您提供了一個乾淨且人性化的API(基本上與當前用於gRPC API的Node.js相同的API,剛剛轉移到客戶端)。
在後端,gRPC伺服器可以用任何支援gRPC的語言編寫,包括Go,Java,C ++,Ruby,Node.js等等。最後一塊拼圖是服務代理。從一開始,gRPC-Web將支援Envoy作為預設服務代理,它具有內建的envoy.grpc_web 過濾器,只需幾行復制和可配置配置即可應用。
相關文章
- REST 的替代者:Envoy + gRPC-WebRESTRPCWeb
- grpc-web與react的整合RPCWebReact
- 【譯】gRPC-Web for .NET now availableRPCWebAI
- gRPC-web現狀及測試RPCWeb
- 構建無縫整合的gRPC-Web和Istio的雲原生應用教程RPCWeb
- 讓 gRPC 提供 REST 服務RPCREST
- Envoy 中的 xDS REST 和 gRPC 協議詳解RESTRPC協議
- Ambassador 0.52 新特性:會話親和性、負載均衡控制、gRPC-Web會話負載RPCWeb
- 精讀《REST, GraphQL, Webhooks, & gRPC 如何選型》RESTWebHookRPC
- JavaScript 的閉包JavaScript
- mitmproxy grpc 抓包MITRPC
- 在 Fedora 中安裝替代版本的 RPM 包
- 理解Javascript的閉包JavaScript
- [JavaScript閉包]Javascript閉包的判別,作用和示例JavaScript
- [譯]使用 JavaScript 物件 Rest 和 Spread 的7個技巧JavaScript物件REST
- `rest-client`庫RESTclient
- nicetool--替代hutool和fastjson的工具庫ASTJSON
- 理解 JavaScript 中的閉包JavaScript
- 對javascript閉包的理解JavaScript
- Javascript中的閉包encloureJavaScript
- JavaScript閉包的那些事~JavaScript
- 只有一個依賴包的Dockerized容器的簡單的Http REST APIDockerZedHTTPRESTAPI
- Go 語言實現 gRPC 的釋出訂閱模式,REST 介面和超時控制GoRPC模式REST
- JavaScript庫遭入侵,小心Copay錢包中的錢不翼而飛JavaScript
- javascript閉包的個人理解JavaScript
- 面試:對javascript的閉包的理解面試JavaScript
- Segment使用Go、gRPC和Envoy作為後端REST API實現GoRPC後端RESTAPI
- 介紹一個功能強大的 Visual Studio Code 擴充套件 - Rest Client,能部分替代 Postman套件RESTclientPostman
- 進擊的 JavaScript(四) 之 閉包JavaScript
- javascript中的閉包closure詳解JavaScript
- 到底什麼樣的 REST 才是最佳 REST?REST
- GRPC的使用RPC
- Java的GRPCJavaRPC
- V8替代?用Rust編寫的JavaScript引擎Boa釋出RustJavaScript
- 打造自己的JavaScript工具庫JavaScript
- 用webpack寫個現代的JavaScript包WebJavaScript
- javascript閉包的使用–按鈕切換JavaScript
- JavaScript中的包裝型別詳解JavaScript型別