日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

gRPC-Web发布,REST又要被干掉了?

發(fā)布時(shí)間:2023/12/31 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gRPC-Web发布,REST又要被干掉了? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

云原生計(jì)算基金會(huì)(CNCF)正式發(fā)布GA版本的gRPC-Web,這是一個(gè)JavaScript客戶端庫(kù),使Web應(yīng)用程序能夠直接與后端gRPC服務(wù)通信,不需要HTTP服務(wù)器充當(dāng)中介。這意味著你現(xiàn)在可以通過(guò).proto文件來(lái)定義客戶端和服務(wù)器端數(shù)據(jù)類型和服務(wù)接口,輕松構(gòu)建真正的端到端gRPC應(yīng)用程序架構(gòu)。gRPC-Web為Web開(kāi)發(fā)提供了REST之外的另一個(gè)選擇。

\\

基礎(chǔ)

\\

gRPC-Web讓你能夠使用.proto來(lái)定義客戶端Web應(yīng)用程序和后端gRPC服務(wù)器之間的服務(wù)“契約”,并自動(dòng)生成客戶端JavaScript(你可以選擇Closure編譯器或使用更為廣泛的CommonJS)。你可以不用再為這些事情操心:創(chuàng)建自定義JSON序列化和反序列化邏輯、處理HTTP狀態(tài)代碼(可能因??REST API而異)、Content-Type協(xié)商等。

\\

從更廣泛的架構(gòu)角度來(lái)看,gRPC-Web讓端到端的gRPC成為可能。如下圖所示:

\\

\\

在左側(cè),一個(gè)客戶端應(yīng)用程序通過(guò)Protocol Buffers與一個(gè)gRPC后端服務(wù)器通信,然后這個(gè)服務(wù)器也通過(guò)Protocol Buffers與其他的gRPC后端服務(wù)器通信。在右側(cè),Web應(yīng)用程序通過(guò)HTTP與后端REST API服務(wù)器通信,然后這個(gè)服務(wù)器又通過(guò)Protocol Buffers與其他后端服務(wù)通信。

\\

需要明確指出的是,右側(cè)的REST應(yīng)用程序本身沒(méi)有任何問(wèn)題。已經(jīng)有大量非常成功的應(yīng)用程序是基于REST API服務(wù)器而構(gòu)建的,這些服務(wù)器使用非HTTP協(xié)議與后端服務(wù)進(jìn)行通信。但如果這些應(yīng)用程序的開(kāi)發(fā)過(guò)程只圍繞一個(gè)協(xié)議和一組.proto接口(以及一組服務(wù)契約)進(jìn)行,那么就可以節(jié)省無(wú)數(shù)個(gè)小時(shí)的時(shí)間以及避免那些令人頭疼的問(wèn)題。gRPC-Web的好處不僅僅體現(xiàn)在“技術(shù)”方面,還體現(xiàn)在對(duì)組織的影響上。圖中的亮橙色線不僅僅是一個(gè)協(xié)議——它代表的是獨(dú)立的工作和認(rèn)知負(fù)荷來(lái)源,而現(xiàn)在,你完全可以把它變成亮綠色。

\\

gRPC-Web的優(yōu)勢(shì)

\\

隨著時(shí)間的推移,gRPC-Web將提供更廣泛的特性集。目前,我可以看到的是:

\\
  • 端到端gRPC——如上所述,有了gRPC-Web,你就可以正式從技術(shù)棧中移除REST組件,并用gRPC來(lái)替換,從而可以使用Protocol Buffers來(lái)創(chuàng)建整個(gè)RPC管道。想象一下這樣的場(chǎng)景:一個(gè)客戶端請(qǐng)求被轉(zhuǎn)發(fā)到HTTP服務(wù)器上,HTTP服務(wù)器與后端的5個(gè)gRPC服務(wù)進(jìn)行交互。你很可能需要花費(fèi)很多時(shí)間來(lái)構(gòu)建HTTP交互層,因?yàn)槟阈枰獦?gòu)建整個(gè)管道的其余部分。\
  • 前端和后端團(tuán)隊(duì)之間更緊密的協(xié)作——回看上面的圖表,使用Protocol Buffers定義整個(gè)RPC管道后,你就不再需要將“微服務(wù)團(tuán)隊(duì)”與“客戶端團(tuán)隊(duì)”捆綁在一起??蛻舳伺c后端之間的交互只是多了一個(gè)gRPC層。\
  • 輕松生成客戶端庫(kù)——使用gRPC-Web之后,與“外部”世界交互的服務(wù)器變成了gRPC服務(wù)器而不是HTTP服務(wù)器,這意味著所有的客戶端庫(kù)都可以是gRPC庫(kù)。需要Ruby、Python、Java和其他4種語(yǔ)言的客戶端庫(kù)嗎?你不再需要為所有這些語(yǔ)言編寫(xiě)HTTP客戶端了。\

一個(gè)gRPC-Web示例

\\

上面介紹了gRPC-Web在大規(guī)模應(yīng)用中的一些優(yōu)勢(shì)。現(xiàn)在讓我們通過(guò)一個(gè)例子來(lái)說(shuō)明:一個(gè)簡(jiǎn)單的TODO應(yīng)用程序。在gRPC-Web中,你可以從一個(gè)簡(jiǎn)單的todos.proto定義開(kāi)始,如下所示:

\\\syntax = “proto3”;\\?\package todos;\\?\message Todo {\ string content = 1;\ bool finished = 2;\}\\?\message GetTodoRequest {\ int32 id = 1;\}\\?\service TodoService {\ rpc GetTodoById (GetTodoRequest) returns (Todo);\}\\\

你可以使用這個(gè).proto定義和protoc命令行工具生成CommonJS客戶端代碼:

\\\protoc echo.proto \\\ --js_out=import_style=commonjs:./output \\\ --grpc-web_out=import_style=commonjs:./output\\\

然后從后端gRPC服務(wù)器獲取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) =\u0026gt; {\\?\ 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()}`);\ }\ }\});\\

這里沒(méi)有HTTP代碼或方法,沒(méi)有JSON解析,沒(méi)有頭部信息協(xié)商。你聲明了數(shù)據(jù)類型和服務(wù)接口,gRPC-Web抽離了所有的樣板代碼,留給你的是一組干凈且人性化的API。

\\

在后端,gRPC服務(wù)器可以使用任何支持gRPC的語(yǔ)言編寫(xiě),包括Go、Java、C++、Ruby、Node.js等等(請(qǐng)參閱官方gRPC文檔中的與開(kāi)發(fā)語(yǔ)言相關(guān)的文檔https://grpc.io/docs/)。最后一個(gè)關(guān)鍵組件是服務(wù)代理。從一開(kāi)始,gRPC-Web支持將Envoy作為默認(rèn)服務(wù)代理,它提供了內(nèi)置的envoy.grpc_web過(guò)濾器,只需幾行配置即可。更多信息將在Envoy博客上(https://blog.envoyproxy.io/)詳細(xì)說(shuō)明。

\\

下一步

\\

GA版本的發(fā)布意味著核心構(gòu)建塊已經(jīng)就緒,可以用在生產(chǎn)環(huán)境中。但gRPC-Web還將帶來(lái)很多其他的東西??梢圆榭垂俜降拈_(kāi)發(fā)路線圖(https://github.com/grpc/grpc-web/blob/master/ROADMAP.md),以便了解核心團(tuán)隊(duì)所設(shè)想的未來(lái)。

\\

如果你有興趣為gRPC-Web做出貢獻(xiàn),核心團(tuán)隊(duì)希望社區(qū)能夠?yàn)橐韵率马?xiàng)提供幫助:

\\
  • 前端框架集成——常用的前端框架(如React、Angular和Vue)尚未正式支持gRPC-Web。我們希望看到這些框架能夠支持它,因?yàn)槊總€(gè)框架都將從gRPC中受益匪淺。\
  • 特定于語(yǔ)言的代理支持——截止GA版本,Envoy是gRPC-Web的默認(rèn)代理,通過(guò)一個(gè)特殊的模塊提供支持。我們也很樂(lè)意看到使用其他特定語(yǔ)言開(kāi)發(fā)進(jìn)程內(nèi)代理。進(jìn)程內(nèi)代理移除了對(duì)特殊代理的依賴——例如Envoy和nginx——并且可以讓gRPC-Web的使用變得更加容易。\

查看英文原文:https://www.cncf.io/blog/2018/10/24/grpc-web-is-going-ga/

總結(jié)

以上是生活随笔為你收集整理的gRPC-Web发布,REST又要被干掉了?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。